以编程方式更改layer-list Drawable中项目的底部属性

6
我正在创建一个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);

这是什么?
2个回答

5

这是一个旧问题,但我认为在这里发布答案,以防对某人有所帮助。

通过使用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的像素值。

希望这能对某些人有所帮助。


5

经过大量探索,我找到了一个解决方案,虽然它解决了我的问题,但不是我想要的。

我创建了一个layer-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>

以下代码可以在运行时修改上述可绘制对象的颜色。
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);

发布解决方案,希望能对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接