有没有一种简单的方法来添加边框到Android视图的顶部和底部?

我有一个TextView,我想要在其顶部和底部边框添加一个黑色边框。 我试着向TextView添加android:drawableTopandroid:drawableBottom ,但是这只会导致整个视图变黑。

 <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?

在android 2.2中,你可以做到以下几点。

创build一个xml drawable,如/res/drawable/textlines.xml,并将其作为TextView的背景属性进行分配。

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

/res/drawable/textlines.xml

 <?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> 

不利的一面是,你必须指定一个不透明的背景色,因为透明胶片不起作用。 (至less我以为他们做了,但我错了)。 在上面的例子中,您可以看到第一个形状#FFdddddd的纯色以第二个形状笔触颜色复制。

我已经使用了一个技巧,使边框显示在容器外部。 有了这个技巧,只有一条线被绘制,所以背景将显示底层视图。

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="1dp" android:left="-2dp" android:right="-2dp" android:top="-2dp"> <shape android:shape="rectangle" > <stroke android:width="1dp" android:color="#FF000000" /> <solid android:color="#00FFFFFF" /> <padding android:left="10dp" android:right="10dp" android:top="10dp" android:bottom="10dp" /> </shape> </item> </layer-list> 

选项1:形状可绘制

如果您想在可以设置背景的布局或视图周围放置边框,这是最简单的选项。 在drawable文件夹中创build一个如下所示的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> 

如果您不想填充,可以移除solid 。 在布局/视图中设置background="@drawable/your_shape_drawable"

选项2:背景视图

这是我在RelativeLayout使用的一个小技巧。 基本上你有一个黑色的广场,你要给一个边框的视图,然后给这个视图一些填充(而不是边距!),所以黑色方块显示在边缘。

显然这只有在视图没有任何透明区域的情况下才能正常工作。 如果是这样,我会build议你写一个自定义的BorderView只绘制边框 – 它应该只有几十行代码。

 <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有一个背景,那么它是行不通的,因为有一个bug会阻止你使用View填充一个RelativeLayout 。 在这种情况下,我会推荐Shape drawable。

选项3:9补丁

最后一个select是使用一个像这样的9补丁drawable:

你可以在任何你可以设置android:background="@drawable/..."视图上使用它。 是的,它需要6×6 – 我试过5×5,它不工作。

这种方法的缺点是你不能很容易地改变颜色,但是如果你想要花哨的边框(例如在这个问题中只有顶部和底部的边框),那么你可能无法使用Shape可绘制的,这不是很强大。

选项4:额外的意见

如果您只希望在您的视图上方和下方的边框,我忘了提及这个非常简单的选项。 你可以把你的视图放在一个垂直的LinearLayout (如果它不是),然后像这样在它的上面和下面添加空的View

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

要只在底部添加一个1dp白色边框,并有一个透明的背景,你可以使用下面这个比这里的大多数答案简单。

对于TextView或其他视图添加:

 android:background="@drawable/borderbottom" 

并在drawable目录中添加以下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"

颜色不需要是白色的,背景也不需要透明。

基本上,这个XML将使用矩形形状创build边框,然后将顶部,右侧和左侧推到渲染区域之外。 这只留下可见的底部边框。

所以我想做一些稍微不同的事情:只在底部设置一个边框来模拟一个ListView分隔线。 我修改了Piet Delport的回答,得到了这个结果:

 <?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="@color/background_trans_light" /> </shape> </item> <!-- this mess is what we have to do to get a bottom border only. --> <item android:top="-2dp" android:left="-2dp" android:right="-2dp" android:bottom="1px"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/background_trans_mid" /> <solid android:color="@null" /> </shape> </item> </layer-list> 

请注意使用px而不是dp来获得正好是1个像素的分频器(有些手机DPI会使1dp线消失)。

目前接受的答案不起作用。 由于抗锯齿,它会在视图的左侧和右侧创build薄的垂直边界。

这个版本完美的作品。 它还允许您独立设置边框宽度,如果需要也可以在左侧或右侧添加边框。 唯一的缺点是它不支持透明度。

用下面的代码创build一个名为/res/drawable/top_bottom_borders.xml的xml drawable,并将其指定为TextView的背景属性。

 <?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> 

通过棉花糖testingAndroid KitKat

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

正如@Nic Hubbard所说的那样,有一种非常简单的方法来添加边界线。

 <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#000000" > </View> 

你可以改变高度和背景颜色为任何你想要的。

我的答案是基于@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" 

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

首先制作一个带有如下所示内容的XML文件,并将其命名为border.xml,并将其放在res目录内的布局文件夹中

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="1dp" android:color="#0000" /> <padding android:left="0dp" android:top="1dp" android:right="0dp" android:bottom="1dp" /> </shape> 

之后在代码里面使用

 TextView tv = (TextView)findElementById(R.id.yourTextView); tv.setBackgroundResource(R.layout.border); 

这将在TextView的顶部和底部形成一条黑线。

写下面的代码

 <View android:layout_width="wrap_content" android:layout_height="2dip" android:layout_below="@+id/topics_text" android:layout_marginTop="7dp" android:layout_margin="10dp" android:background="#ffffff" /> 

只需将我的解决scheme添加到列表中

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

 <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> 

这给了我;

在这里输入图像描述

要改变这个:

 <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> 

这只会使边框,而不是一个矩形,如果你的背景有一个颜色将出现。

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

你也可以使用9path来完成你的工作。 创build它,使彩色像素不会在高度上增加,但只有透明像素。

 <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