Программно изменить цвет формы в списке слоев

Как я могу программным образом изменить цвет ( #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> 

Solutions Collecting From Web of "Программно изменить цвет формы в списке слоев"

Прежде всего вам нужно присвоить идентификатор вам элемент 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) 
 <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 by findDrawableByLayerId() , вам нужно было вызвать view.setBackground(layerDrawable) чтобы это вступило в силу. В качестве альтернативы, создание экземпляра layerDrawable по view.getBackground() также сработало.