我有一个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?


当前回答

为什么不直接用背景色创建一个1dp高视图呢?然后它可以很容易地放在你想要的地方。

其他回答

目前接受的答案行不通。作为抗锯齿的结果,它在视图的左右两侧创建了薄的垂直边界。

这个版本工作得很完美。它还允许你独立地设置边界宽度,如果你愿意,你也可以在左边/右边添加边界。唯一的缺点是它不支持透明性。

用下面的代码创建一个名为/res/drawable/top_bottom_borders.xml的xml可绘制对象,并将其分配为TextView的background属性。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#DDDD00" /> <!-- border color -->
        </shape>
    </item>

    <item
        android:bottom="1dp" 
        android:top="1dp">   <!-- adjust borders width here -->
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />  <!-- background color -->
        </shape>
    </item>
</layer-list>

在Android KitKat和Marshmallow平台上进行测试

只是把我的解决方案添加到列表中。

我想要一个半透明的底部边界延伸到原来的形状(所以半透明的边界在父矩形之外)。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item>
    <shape android:shape="rectangle" >      
      <solid android:color="#33000000" /> <!-- Border colour -->
    </shape>
  </item>
  <item  android:bottom="2dp" >
    <shape android:shape="rectangle" >     
      <solid android:color="#164586" />
    </shape>
  </item>
</layer-list>

这给了我;

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/light_grey1" />
<stroke
    android:width="1dip"
    android:color="@color/light_grey1" />

<corners
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />

    </shape>

你也可以使用9条路径来完成你的工作。创建它,使彩色像素的高度不相乘,但只有透明像素。

尝试用线性布局包装图像,并将其背景设置为你想要的文本周围的边框颜色。然后设置在textview的填充物的厚度,你想为你的边界。