Изменить свойство bottom элемента layer-list Drawable программно
Я создаю 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 ответа
После долгих раскопок я нашел решение, хотя оно решило мою проблему, но это не то, что я искал.
Я создал нарисованный список слоев и динамически изменил цвет его элементов. Вот код:
<?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);
опубликовал решение, думал, что кто-то может получить выгоду.
Это старый вопрос, но я решил опубликовать здесь ответ, если он кому-то поможет.
Способ изменить свойство bottom списка слоев программно с помощью 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.
Надеюсь, это кому-нибудь поможет.