与其同级宽度相同但有限制的视图

A view with an equal width as its sibling but with a limit

我正在尝试构建一个看起来像这样的 UI :

文字长度较短时,下划线宽度等于文字宽度

      Short Text
      __________

当文本长度较长时,下划线宽度等于限制

  A sample long text
     ____________

如何构建下划线宽度按照上述方式自适应的视图?

我尝试使用 RelativeLayout,它有一个 TextView 用于文本,一个空的 TextView 用于下划线(具有 alignLeftalignRight 属性)最大宽度 属性。当设置了 alignLeftalignRight 时,看起来 maxWidth 属性 不被接受。

任何实现此目标的建议都将受到赞赏。

您可以在 xml 中使用以下标签:

<View
   android:id="@+id/underline"
   android:layout_alignLeft="@id/textView"
   android:layout_alignRight="@id/textView"
   android:layout_below="@id/textView"/>

属性 layout_alignLeftlayout_alignRight 会将视图设置为与您指定的元素的起点和终点对齐。有关属性的更多信息,请参见 this answer by kcoppock


编辑:我现在看到你试过了,似乎忽略了 maxWidth。您可以尝试在设置 TextView 的文本时以编程方式添加填充,如下所示:

if(textView.getWidth() > maxWidth){
   // Get amount it went over
   int remainingLength = textView.getWidth() - maxWidth;
   // Cut it in half
   int paddingLength = remainingLength / 2
   // Set left/right padding to center the line
   lineView.setPadding(paddingLength, 0, paddingLength, 0);
}

这是 setPadding() 的文档。

我想出了解决方案。似乎工作正常。

思路是用一个RelativeLayout配2个children。 child 个视图都是 TextViews。第一个表现得像一个普通的 TextView。第二个是TextViewtextColor是透明的,背景是下划线需要的颜色,layout_widthwrap_contentmaxWidth是极限。为两个视图设置相同的文本似乎做得相当不错。

布局文件如下 </p> <pre><code><RelativeLayout android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/headline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:gravity="center|bottom" android:maxLines="3" android:textColor="@android:color/black" android:ellipsize="end"/> <TextView android:id="@+id/underline" android:layout_width="wrap_content" android:layout_height="2dp" android:maxWidth="160dp" android:layout_below="@id/headline" android:gravity="center" android:textColor="@android:color/transparent" android:layout_centerHorizontal="true" android:background="@android:color/black"/> </RelativeLayout>