アクションバーの下部にある分割バーの色をプログラムで変更しようとしています。私の戦略は、この 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;
}