开放式的Android中风?

是否有可能创build一个只有某些侧面的笔触的Android形状对象?

例如我有:

<stroke android:width="3dip" android:color="#000000" android:dashWidth="10dip" android:dashGap="6dip" /> 

这是类似于这个CSS:

 border: 3px dashed black; 

我怎样才能在一边设置中风? 这是我如何在CSS中做到这一点:

 border-left: 3px dashed black; 

你如何在Android XML中做到这一点?

我用这个做了一个很好的解决scheme:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item android:top="-1dp" android:right="-1dp" android:left="-1dp"> <shape> <solid android:color="@android:color/transparent" /> <stroke android:width="1dp" android:color="#ffffff" /> </shape> </item> </layer-list> 

如果你需要一个透明的背景,但仍然是一个开放的笔触颜色(在我的情况下,我只需要一个底线)这很好用。 如果你需要一个背景颜色,你可以添加一个坚实的形状颜色,在Maragues的答案。

编辑1

有时,对于高密度设备,使用低倾angular值可能以非常薄或不可见的笔划或距离结束。 这也可能发生在您设置ListView分隔线时。

最简单的解决方法是使用1px而不是1dp的距离。 这将使线条始终可见所有密度。 最好的解决scheme是创build每个密度的维度资源,以获得每个设备的最佳尺寸。

编辑2

很有趣,但是我在6年后尝试使用这个,在棒棒糖设备上我得不到一个好的结果。

目前的解决scheme可能是使用9补丁。 毕竟,Android应该已经为这个问题做了一个简单的解决scheme。

我解决了这个问题,通过使用一个列表层,结合两个形状,其中一个高度1dp放置在底部

optionscreen_bottomrectangle.xml:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <solid android:color="#535353" /> </shape> </item> <!-- This is the main color --> <item android:bottom="1dp"> <shape> <solid android:color="#252525" /> </shape> </item> </layer-list> 

然后,在layout / main.xml文件中

 <TextView android:id="@+id/bottom_rectangle" android:background="@drawable/optionscreen_bottomrectangle" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_below="@id/table_options" android:layout_above="@id/exit_bar"/> 

其中填充table_options和exit_bar之间的背景,并在exit_bar打印1dp行之前。 这对我来说是诀窍,我希望它能帮助别人。

编辑回答,以正确的顺序放置图层。 Thx亚历克斯!

另一个使用填充而不是其他的反应。 这个小snipplet使上下边界。

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <padding android:left="0dp" android:top="1dp" android:right="0dp" android:bottom="1dp"/> <solid android:color="#898989" /> </shape> </item> <!-- This is the main color --> <item> <shape> <solid android:color="#ffffff" /> </shape> </item> </layer-list> 

@ Maragues的回答是倒退的,因为图层列表drawables从上到下绘制(意味着列表中的最后一项在最上面绘制):

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <solid android:color="#535353" /> </shape> </item> <!-- This is the main color --> <item android:bottom="1dp"> <shape> <solid android:color="#252525" /> </shape> </item> </layer-list> 

这将有效地填充线条颜色的形状,然后在其上绘制背景颜色,最后1dp清除线条颜色显示。

我知道这个问题是很久以前发布的,所以发布这个问题的人不会使用这个答案,但是这个问题仍然可以帮助其他人。

  <?xml version="1.0" encoding="UTF-8"?> <!-- inset is used to remove border from top, it can remove border from any other side--> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="-2dp" > <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle"> <stroke android:width="1dp" android:color="#b7b7b7" /> <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp"/> <solid android:color="#454444"/> </shape> </inset> 

使用inset标记并为要移除的边框赋予负值。

可能的值是:

android:insetTop="-1dp" android:insetBottom="-1dp" android:insetLeft="-1dp" android:insetRight="-1dp"

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="#BBBBBB" /> <solid android:color="@android:color/transparent" /> </shape> </item> <item android:bottom="2dp" > <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="@color/main_background_color" /> <solid android:color="@android:color/transparent" /> </shape> </item> 

我用了下面的代码。

 <?xml version="1.0" encoding="UTF-8"?> <!-- inset is used to remove border from top, it can remove border from any other side--> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="-2dp" android:insetLeft="-2dp" android:insetRight="-2dp" > <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle"> <stroke android:width="1dp" android:color="@color/colorPrimary" /> <solid android:color="#0000"/> <padding android:left="2dp" android:top="2dp" android:bottom="2dp" android:right="2dp"/> </shape> </inset>