开放式的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>