我正在尝试以编程方式更改操作栏底部的分隔栏的颜色。我的策略是基于以下 XML将操作栏背景设置为以编程方式生成LayerDrawable
的包含矩形:ShapeDrawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Bottom Line -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/action_bar_line_color" />
</shape>
</item>
<!-- Color of your action bar -->
<item android:bottom="2dip">
<shape android:shape="rectangle">
<solid android:color="@color/action_bar_color" />
</shape>
</item>
</layer-list>
但是我遇到了一个障碍:我不知道如何以编程方式应用android:bottom
属性(如)。<item android:bottom="2dip">
显然android:bottom
是项目标签的一个属性,(我认为)没有程序上的等价物,而且我无法找到任何ShapeDrawable
看起来合适的方法/属性。
到目前为止的代码:
public LayerDrawable createABBackground(String color) {
ShapeDrawable rect = new ShapeDrawable(new RectShape());
rect.getPaint().setColor(Color.parseColor("#000000"));
ShapeDrawable rect2 = new ShapeDrawable(new RectShape());
rect2.getPaint().setColor(Color.parseColor(color));
ShapeDrawable[] layers = {rect, rect2};
LayerDrawable background = new LayerDrawable(layers);
return background;
}
想法?如果它对替代解决方案很重要,我正在使用 ActionBarSherlock。
编辑:
setLayerInset,按照 MH 的建议,做了我想要的。这是使用它的函数的修改版本:
public LayerDrawable createABBackground(String color) {
ShapeDrawable rect = new ShapeDrawable(new RectShape());
rect.getPaint().setColor(Color.parseColor(color));
ShapeDrawable rect2 = new ShapeDrawable(new RectShape());
rect2.getPaint().setColor(Color.parseColor("#000000"));
ShapeDrawable[] layers = {rect, rect2};
LayerDrawable background = new LayerDrawable(layers);
background.setLayerInset(0, 0, 3, 0, 0);
background.setLayerInset(1, 0, 0, 0, 3);
return background;
}