有没有一种简单的方法来添加边框到Android视图的顶部和底部?
我有一个TextView,我想要在其顶部和底部边框添加一个黑色边框。 我试着向TextView添加android:drawableTop
和android: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