Я пытаюсь программно изменить цвет разделителя внизу панели действий. Моя стратегия состоит в том, чтобы установить фон панели действий на программно сгенерированный LayerDrawable
, содержащий ShapeDrawable
прямоугольников, на основе этот XML:
<?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;
}
setLayerInset(int index, int l, int t, int r, int b)
попробовать? В документах говорится: Укажите модификаторы границ для drawable[index]. левый += l верхний += t; справа -= г; внизу -= б; - person MH.   schedule 04.07.2013