我有一个TextView,我想添加一个黑色边界沿其顶部和底部边界。我尝试添加android:drawableTop和android:drawableBottom到TextView,但这只会导致整个视图变成黑色。
<TextView
android:background="@android:color/green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableTop="@android:color/black"
android:drawableBottom="@android:color/black"
android:text="la la la" />
有没有一种方法可以轻松地添加一个顶部和底部边界的视图(特别是TextView)在Android?
要改变这一点:
<TextView
android:text="My text"
android:background="@drawable/top_bottom_border"/>
我更喜欢“drawable/top_bottom_border.xml”中的这种方法:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="270"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
<item>
<shape>
<gradient
android:angle="90"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
</layer-list>
这只是使边界,而不是一个矩形,将出现,如果你的背景有颜色。
为了只在底部添加1dp白色边框,并且有一个透明的背景,你可以使用下面的方法,这比这里的大多数答案都简单。
对于TextView或其他视图添加:
android:background="@drawable/borderbottom"
在可绘制目录中添加以下XML,称为borderbottom.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-2dp" android:left="-2dp" android:right="-2dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#ffffffff" />
<solid android:color="#00000000" />
</shape>
</item>
</layer-list>
如果你想在顶部设置边框,将android:top="-2dp"改为android:bottom="-2dp"
颜色不需要是白色的,背景也不需要是透明的。
固体元素可能不是必需的。这取决于你的设计(感谢V. Kalyuzhnyu)。
基本上,这个XML将使用矩形形状创建边框,但随后将顶部、右侧和左侧推到形状的渲染区域之外。这样只留下底部边界可见。
要改变这一点:
<TextView
android:text="My text"
android:background="@drawable/top_bottom_border"/>
我更喜欢“drawable/top_bottom_border.xml”中的这种方法:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="270"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
<item>
<shape>
<gradient
android:angle="90"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
</layer-list>
这只是使边界,而不是一个矩形,将出现,如果你的背景有颜色。
我的答案是基于@Emile的版本,但我使用透明的颜色而不是纯色。
这个例子将绘制一个2dp的底部边界。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<stroke android:width="2dp"
android:color="#50C0E9" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:bottom="2dp" >
<shape android:shape="rectangle" >
<stroke android:width="2dp"
android:color="@color/bgcolor" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
</layer-list>
@color/bgcolor是背景颜色,你可以在上面绘制视图的边框。
如果你想改变边界的位置,用以下方法之一改变偏移量:
android:bottom="2dp"
android:top="2dp"
android:right="2dp"
android:left="2dp"
或者将它们组合成2个或更多边框:
android:bottom="2dp" android:top="2dp"