Как привязатьBaseline к нижней строке многострочного TextView?

У меня есть два TextViews бок о бок. Скажем, левый TextView - 1 строка, а правый TextView - 2 строки. Есть ли способ выровнять исходные тексты левого TextView с последней строкой в ​​правом TextView?

Я открыт для использования любого макета (RelativeLayout, LinearLayout и т.д.), который может выполнить это.

(Поведение android:layout_alignBaseline по умолчанию в Android - это то, что он выравнивает базовые линии верхних строк.)

Ответ 1

Вы можете выполнить это с помощью RelativeLayout, если вы реализуете пользовательский TextView. В частности, вы можете переопределить TextView.getBaseline так:

package mypackage.name;

// TODO: imports, etc.

public class BaselineLastLineTextView extends TextView {
    // TODO: constructors, etc.

    @Override
    public int getBaseline() {
        Layout layout = getLayout();
        if (layout == null) {
            return super.getBaseline();
        }
        int baselineOffset = super.getBaseline() - layout.getLineBaseline(0);
        return baselineOffset + layout.getLineBaseline(layout.getLineCount()-1);
    }
}

Затем вы будете использовать свой собственный TextView внутри RelativeLayout следующим образом:

<mypackage.name.BaselineLastLineTextView
    android:id="@+id/text_view_1"
    <!-- TODO: other TextView properties -->
/>

<TextView
    android:id="@+id/text_view_2"
    android:layout_alignBaseline="@id/text_view_1"
    <!-- TODO: other TextView properties -->
/>

Ответ 2

Я предполагаю, что RelativeLayout сделает это.

<RelativeLayout..>
    <TextView android:id="@+id/tv2"
        android:layout_alignParentRight="true"
        android:maxLines="2"
        ... />
    <TextView android:id="@+id/tv1"
        android:layout_toLeftOf="@id/tv2"
        android:layout_alignBottom="@id/tv2"
        android:maxLines="1"
        ... />
</RelativeLayout>