Список состояний цвета не распознан в форме Drawable

Я определяю следующий my_background_drawable.xml :

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:gravity="center" android:shape="rectangle"> <solid android:color="@color/color_stateful" /> </shape> </item> <item android:drawable="@drawable/selector_png_drawable" /> </layer-list> 

И я также определяю следующий ресурс списка состояний цвета color_stateful.xml :

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:color="#FF00ff00"/> <item android:color="#FFff0000"/> </selector> 

Когда я устанавливаю заданный my_background_drawable в качестве фона для некоторого вида, я не могу наблюдать за изменением цвета, определенного в color_stateful.xml для моей фигуры, тогда как состояние представления фактически изменено ( selector_png_drawable.xml является индикатором).

Однако все прекрасно, когда я my_background_drawable.xml следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- This doesn't work <item> <shape android:gravity="center" android:shape="rectangle"> <solid android:color="@color/color_stateful" /> </shape> </item> --> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:gravity="center" android:shape="rectangle"> <solid android:color="#FF00ff00" /> </shape> </item> <item> <shape android:gravity="center" android:shape="rectangle"> <solid android:color="#FFff0000" /> </shape> </item> </selector> </item> <item android:drawable="@drawable/selector_png_drawable"" /> </layer-list> 

Так верно ли, что информация о состоянии цвета просто теряется, когда ресурс ColorStateList используется в ShapeDrawable или я делаю это неправильно?

Solutions Collecting From Web of "Список состояний цвета не распознан в форме Drawable"

ColorStateList не может быть передан как атрибут для <solid> в определении XML или действительно какой-либо атрибут <shape> . Этот атрибут раздувается из XML как ресурс цвета, а затем передается методу setColor() Drawable, который принимает только одно значение ARGB.

Существует только один тип экземпляра Drawable, который предназначен для размещения и представления нескольких элементов на основе состояния, а это StateListDrawable , что вы получаете, когда вы надуваете <selector> . Все остальные экземпляры Drawable предназначены просто для того, чтобы быть членами этой коллекции или отрисовываться отдельно.

Также обратите внимание, что надутый элемент <shape> самом деле является GradientDrawable а не ShapeDrawable . Если вы проверите метод inflate() GradientDrawable в источнике , вы можете получить всю деталь, которую вы могли бы спросить о том, как используется каждый атрибут.

НТН!

Фактически вы можете назначить ColorStateList как сплошной цвет внутри xml shape aa -> GradientDrawable , но это только новая функция в Lollipop .

Старые версии GradientDrawable только цветовые ресурсы.

В настоящее время мы работаем над альтернативной альтернативой, если вы заинтересованы.

Вы делаете это сжимаете …. просто замените это

  android:color="@color/color_stateful" 

с

 android:background="@color/color_stateful" 

Обновить:

В вашем программном коде в файле my_background_drawable.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:gravity="center" android:shape="rectangle"> <solid android:background="@color/color_stateful" /> <!--this is the chanage i made... here--> </shape> </item> <item android:drawable="@drawable/selector_png_drawable" /> </layer-list>