与其同级宽度相同但有限制的视图
A view with an equal width as its sibling but with a limit
我正在尝试构建一个看起来像这样的 UI :
文字长度较短时,下划线宽度等于文字宽度
Short Text
__________
当文本长度较长时,下划线宽度等于限制
A sample long text
____________
如何构建下划线宽度按照上述方式自适应的视图?
我尝试使用 RelativeLayout
,它有一个 TextView
用于文本,一个空的 TextView
用于下划线(具有 alignLeft
和 alignRight
属性)最大宽度 属性。当设置了 alignLeft
和 alignRight
时,看起来 maxWidth 属性 不被接受。
任何实现此目标的建议都将受到赞赏。
您可以在 xml 中使用以下标签:
<View
android:id="@+id/underline"
android:layout_alignLeft="@id/textView"
android:layout_alignRight="@id/textView"
android:layout_below="@id/textView"/>
属性 layout_alignLeft
和 layout_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
。第二个是TextView
,textColor
是透明的,背景是下划线需要的颜色,layout_width
是wrap_content
,maxWidth
是极限。为两个视图设置相同的文本似乎做得相当不错。
布局文件如下
</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>
我正在尝试构建一个看起来像这样的 UI :
文字长度较短时,下划线宽度等于文字宽度
Short Text __________
当文本长度较长时,下划线宽度等于限制
A sample long text ____________
如何构建下划线宽度按照上述方式自适应的视图?
我尝试使用 RelativeLayout
,它有一个 TextView
用于文本,一个空的 TextView
用于下划线(具有 alignLeft
和 alignRight
属性)最大宽度 属性。当设置了 alignLeft
和 alignRight
时,看起来 maxWidth 属性 不被接受。
任何实现此目标的建议都将受到赞赏。
您可以在 xml 中使用以下标签:
<View
android:id="@+id/underline"
android:layout_alignLeft="@id/textView"
android:layout_alignRight="@id/textView"
android:layout_below="@id/textView"/>
属性 layout_alignLeft
和 layout_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
。第二个是TextView
,textColor
是透明的,背景是下划线需要的颜色,layout_width
是wrap_content
,maxWidth
是极限。为两个视图设置相同的文本似乎做得相当不错。
布局文件如下
</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>