如何在线性布局的一侧绘制边框?

我能够将边界绘制成线性布局,但是它正在被绘制在各个方面。 我只想把它限制在右边,就像你在CSS中一样(border-right:1px solid red;)。

我已经尝试过了,但它仍然在各方面:

<?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:height="2dp" android:width="2dp" android:color="#FF0000" /> <solid android:color="#000000" /> <padding android:bottom="0dp" android:left="0dp" android:right="1dp" android:top="0dp" /> <corners android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" android:radius="1dp" android:topLeftRadius="5dp" android:topRightRadius="0dp" /> </shape> </item> 

有关如何完成此任何build议?

顺便说一句,我不想​​使用在所需的一面放宽1dp视图的黑客。

你可以使用它来获得一边的边界

 <?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="#FF0000" /> </shape> </item> <item android:left="5dp"> <shape android:shape="rectangle"> <solid android:color="#000000" /> </shape> </item> </layer-list> 

EDITED

包括我在内的很多人都希望有一个透明背景的边框,我已经实现了一个BorderDrawable ,它可以像我们使用CSS一样的方式为我提供不同大小和颜色的边框。 但是这不能通过XML使用。 为了支持XML,我添加了一个BorderFrameLayout在其中可以打包布局。

看到我的github的完整来源。

容易如馅饼,允许透明BG:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="0" android:startColor="#f00" android:centerColor="@android:color/transparent" android:centerX="0.01" /> </shape> 

改变angular度来改变边界位置:

  • 0 =离开
  • 90 =底部
  • 180 =正确
  • 270 =顶部

也可以使用单层实现你想要的东西

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="-5dp" android:right="-5dp" android:top="-5dp"> <shape android:shape="rectangle" > <solid android:color="@color/color_of_the_background" /> <stroke android:width="5dp" android:color="@color/color_of_the_border" /> </shape> </item> </layer-list> 

这种方式只有左边框可见,但是您可以通过播放item元素的bottomleftrighttop属性来实现任何组合

要在可绘制的一侧上获得边框,请在其他三个边上应用负片inset (使这些边框被抽出屏幕)。

 <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="-2dp" android:insetBottom="-2dp" android:insetLeft="-2dp"> <shape android:shape="rectangle"> <stroke android:width="2dp" android:color="#FF0000" /> <solid android:color="#000000" /> </shape> </inset> 

在这里输入图像说明

这种方法类似于naykah的答案,但没有使用layer-list

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape> <solid android:color="#f28b24" /> <stroke android:width="1dp" android:color="#f28b24" /> <corners android:radius="0dp"/> <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /> </shape> </item> <item> <shape> <gradient android:startColor="#f28b24" android:endColor="#f28b24" android:angle="270" /> <stroke android:width="0dp" android:color="#f28b24" /> <corners android:bottomLeftRadius="8dp" android:bottomRightRadius="0dp" android:topLeftRadius="0dp" android:topRightRadius="0dp"/> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> </selector> 

作为一种替代方法(如果你不想使用背景),你可以很容易地做到这一点,如下所示:

因为只有右边框,请在布局之后(您想要边框的位置)放置:

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

只有左边框,请在布局之前(您想要边框的位置)放置:

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

为我工作…希望它的一些帮助….

这里没有提到九个补丁文件。 是的,你必须创build文件,但是这是一个非常简单的工作,它真的是“ 跨版本和透明支持 ”的解决scheme。 如果文件被放置在drawable-nodpi目录下,它将工作在px基础上,而drawable-mdpi工作原理大概是dp base(感谢resample)。

原始问题的示例文件( border-right:1px solid red; )在这里:

http://ge.tt/517ZIFC2/v/3?c

只要把它放在drawable-nodpi目录下即可。

不同颜色的Boder。 我已经使用下面的3个项目是代码。

 <?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/colorAccent" /> </shape> </item> <item android:top="3dp"> <shape android:shape="rectangle"> <solid android:color="@color/light_grey" /> </shape> </item> <item android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="3dp"> <shape android:shape="rectangle"> <solid android:color="@color/colorPrimary" /> </shape> </item> </layer-list> 

我能用下面的代码达到效果

 <?xml version=“1.0” encoding=“utf-8"?> <layer-list xmlns:android=“http://schemas.android.com/apk/res/android” > <item android:left=“0dp” android:right=“-5dp” android:top=“-5dp” android:bottom=“-5dp”> <shape android:shape=“rectangle”> <stroke android:width=“1dp” android:color=“#123456" /> </shape> </item> </layer-list> 

您可以通过改变位移的方向来适应边界位置的需要