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


当前回答

选项1:Shape Drawable

这是最简单的选项,如果你想在布局或视图周围设置一个边框,你可以在其中设置背景。在可绘制文件夹中创建一个XML文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#8fff93" />

    <stroke
        android:width="1px"
        android:color="#000" />

</shape>

如果你不想填充,你可以去掉固体。set background="@drawable/your_shape_drawable"在你的布局/视图。

选项2:背景视图

这是我在RelativeLayout中使用的一个小技巧。基本上,你在视图下有一个黑色的正方形,你想给它一个边框,然后给这个视图一些填充(不是边距!),这样黑色的正方形就会在边缘显示出来。

显然,这只有在视图没有任何透明区域时才能正常工作。如果是这样的话,我建议你写一个只画边界的自定义边界视图——它应该只有几十行代码。

<View
    android:id="@+id/border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/image"
    android:layout_alignLeft="@+id/image"
    android:layout_alignRight="@+id/image"
    android:layout_alignTop="@+id/main_image"
    android:background="#000" />

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_...
    android:padding="1px"
    android:src="@drawable/..." />

如果你想知道,它的工作与adjustViewBounds=true。然而,如果你想在整个RelativeLayout中有一个背景,它就不起作用了,因为有一个错误会阻止你用视图填充RelativeLayout。在这种情况下,我建议使用Shape drawable。

选项3:9-patch

最后一个选项是使用一个9补丁的可绘制图,如下图所示:

你可以在任何视图上使用它,你可以设置android:background="@drawable/…"是的,它确实需要6x6 -我试过5x5,但它不起作用。

这种方法的缺点是你不能很容易地改变颜色,但如果你想要花哨的边框(例如,只有顶部和底部的边框,就像这个问题一样),那么你可能无法用Shape drawable来做这些,这不是很强大。

选项4:额外的视图

我忘记提到这个非常简单的选项,如果你只想让边界在视图的上方和下方。你可以把你的视图放在一个垂直的线性布局中(如果它还没有),然后在它的上面和下面添加空视图,就像这样:

<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>

其他回答

你也可以将视图包装在FrameLayout中,然后设置框架的背景颜色和填充为你想要的;然而,textview,默认情况下有一个“透明”的背景,所以你需要改变textview的背景颜色。

在android 2.2中,您可以执行以下操作。

创建一个xml可绘制对象,如/res/drawable/textlines.xml,并将其指定为TextView的背景属性。

<TextView
android:text="My text with lines above and below"
android:background="@drawable/textlines"
/>

xml / res / drawable - textlines。

<?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="1dp" android:color="#FF000000" />
            <solid android:color="#FFDDDDDD" />

        </shape>
   </item>

   <item android:top="1dp" android:bottom="1dp"> 
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#FFDDDDDD" />
            <solid android:color="#00000000" />
        </shape>
   </item>

</layer-list>

这样做的缺点是你必须指定一个不透明的背景颜色,因为透明度是行不通的。(至少我是这么认为的,但我错了)。在上面的例子中,你可以看到第一个形状#FFdddddd的纯色被复制到了第二个形状的描边颜色中。

为了强制执行@phreakhead ' s和user1051892 ' s的答案,<item android:bottom|android:left|android:right|android:top>如果为负,必须大于<stroke android:width>。如果不是,项目的绘画将与笔触的绘画混合,您可能认为这些值不工作。

<TextView
    android:id="@+id/textView3"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#72cdf4"
    android:text=" aa" />

只需添加这个TextView下面的文本,你想添加的边界

// Just simply add border around the image view or view

<ImageView
                android:id="@+id/imageView2"
                android:layout_width="90dp"
                android:layout_height="70dp"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@+id/imageView1"
                android:background="@android:color/white"
                android:padding="5dip" />

// After that dynamically put color into your view or image view object

objView.setBackgroundColor(Color.GREEN);

//VinodJ/Abhishek