如何将Baseline与多行TextView的底线对齐?

时间:2014-10-10 19:24:41

标签: android android-layout

我有两个TextViews并排。假设左侧TextView为1行,右侧TextView为2行。有没有办法将左侧TextView的基线与右侧TextView中的最后一行对齐?

我愿意使用可以实现此目的的任何布局(RelativeLayout,LinearLayout等)。

(Android中android:layout_alignBaseline的默认行为是它对齐顶行的基线。)

3 个答案:

答案 0 :(得分:4)

如果实现自定义TextView,可以使用RelativeLayout完成此操作。具体来说,您可以像这样覆盖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);
    }
}

然后您将在RelativeLayout中使用自定义TextView,如下所示:

<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 -->
/>

答案 1 :(得分:-1)

如今,您可以使用ConstraintLayout轻松实现此目标。

答案 2 :(得分:-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>