Программно изменить цвет формы в списке слоев
Как я могу программно изменить цвет (#000000
) фигуры в списке слоев?
Вот мой список слоев:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#000000" /> // CHANGE THIS COLOR
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
Ответы
Ответ 1
Прежде всего, вам нужно назначить идентификатор вам layer-list
.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- First assign id to the list item-->
<item android:id="@+id/your_shape">
<shape android:shape="rectangle">
<solid android:color="#000000" />
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
Затем получите форму по id.
LayerDrawable shape = (LayerDrawable) getResources().getDrawable(R.drawable.your_shape)
И вы можете изменить цвет своей фигуры, позвонив
shape.setColor(Color.Black); // changing to black color
ИЗМЕНИТЬ
Как getDrawable()
устарел. Используйте следующую строку кода.
LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.your_shape)
Ответ 2
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/gradientDrawble"> // Give id
<shape android:shape="rectangle">
<solid android:color="#000000" /> // CHANGE THIS COLOR
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/bg" />
</shape>
</item>
</layer-list>
Затем в вашем коде просто добавьте
LayerDrawable layerDrawable = (LayerDrawable) getResources()
.getDrawable(R.drawable.my_drawable);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
.findDrawableByLayerId(R.id.gradientDrawble);
gradientDrawable.setColor(color); // change color
Обновление Oct-2016
getDrawable()
теперь устарел, вы должны использовать вместо него ContextCompat.getDrawable(context, color)
.
Кроме того, если вы получили LayerDrawable
на findDrawableByLayerId()
, тогда вам нужно было позвонить view.setBackground(layerDrawable)
, чтобы это вступило в силу. В качестве альтернативы также выполнялось создание экземпляра LayerDrawable
на view.getBackground()
.