我正在创建一个LayerDrawable
,创建底部描边,但我不知道如何给一个图层(Drawablw)的底部边距。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="2dp">
..
</item>
</layer-list>
我想用编程的方式像上面那样设置下距。
到目前为止,我已经这样做了:
Drawable[] list = new Drawable[2];
GradientDrawable strokeDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
strokeColor[0], strokeColor[0] });
GradientDrawable backgroundDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, bgColor);
// Now how to set bottom margin to make border.
list[0] = strokeDrawable;
list[1] = backgroundDrawable;
LayerDrawable layerDrawable = new LayerDrawable(list);
有人知道这个吗?
经过一番挖掘,我找到了一个解决方案,虽然它解决了我的问题,但它不是我想要的。
我创建了一个可绘制的图层列表,并动态地改变了它的项目颜色。下面是代码:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item_bottom_stroke" >
<shape android:shape="rectangle">
<solid android:color="#0096FF"/>
</shape>
</item>
<item android:id="@+id/item_navbar_background" android:bottom="1dp" >
<shape android:shape="rectangle">
<solid android:color="#FFFFFF"/>
</shape>
</item>
下面的代码在运行时修改了上面的drawable,以改变它的颜色。
LayerDrawable layerDrawable = (LayerDrawable) v.getContext().getResources().getDrawable(R.drawable.layer_list_navigation_with_border);
GradientDrawable strokeDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.item_bottom_stroke);
strokeDrawable.setColor(strokeColor[0]);
GradientDrawable backgroundColor = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.item_navbar_background);
backgroundColor.setColors(bgColor);
张贴解决方案,认为有人可能会受益。
这是一个老问题了,但我想我还是把答案贴在这里,以防它能帮助到别人。
通过编程方式改变层列表底部属性的方法是使用layerDrawable.setLayerInset(index, left, top, right, bottom);
在这个问题示例中:
LayerDrawable layerDrawable = (LayerDrawable) v.getContext().getResources().getDrawable(R.drawable.layer_list_navigation_with_border);
layerDrawable.setLayerInset(1, 0, 0, 0, bottom);
其中bottom
为所需dp的像素值。