我正在尝试以编程方式更改操作栏底部的分隔栏颜色。我的策略是根据this 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
是item标签的属性,我认为没有编程等价物,我无法找到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。
编辑:
按照MH的建议,setLayerInset做了我想要的。这是使用它的函数的修改版本:
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;
}
答案 0 :(得分:3)
根据之前的评论:
你试过setLayerInset(int index, int l, int t, int r, int b)
了吗?文档说:
为drawable [index]的边界指定修改器。左+ = l顶部 + = t;对 - = r; bottom - = b;
答案 1 :(得分:1)
通过source code判断LayerDrawable,允许你这样做的方法是私有的。但是你可以通过一个持有InsetDrawable
的LayerDrawable来实现这一目标答案 2 :(得分:0)
如果您可以详细说明您以编程方式更改颜色的原因?如果你还没有控制背景颜色,那么这似乎有点无意义。如果您正在控制背景颜色,那么您可能正在使用样式,在这种情况下,我可以想到几种方法。
西蒙
答案 3 :(得分:0)
这对我有用:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/actionBarLineParent">
<shape
android:id="@+id/actionBarLine"
android:shape="rectangle" >
<solid android:color="@color/red_all_files" />
</shape>
</item>
<item
android:id="@+id/actionBarColourParent"
android:bottom="2dip">
<shape
android:id="@+id/actionBarColour"
android:shape="rectangle" >
<solid android:color="@android:color/white" />
</shape>
</item>
</layer-list>
然后致电:
final LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.actionbar_background);
ld.setDrawableByLayerId(R.id.actionBarLineParent, new ColorDrawable(Color.BLUE));
getActionBar().setBackgroundDrawable(ld);
您需要确保设置android:id