Селектор цвета Android не работает с настраиваемыми атрибутами

У меня есть attrs.xml

<resources> 
    <!-- theme specific colors -->
    <attr format="reference|color" name="foreground" />
    <attr format="reference|color" name="background" /> 
</resources>

И затем в theme.xml

<style name="MyTheme" parent="android:Theme.Black">
    <item name="android:windowNoTitle">true</item>
    <item name="foreground">#0000FF</item>
    <item name="background">#00FF00</item>
</style>

Я также создал селектор цветов с именем forground_to_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:state_pressed="true" android:color="?background"/> <!-- pressed -->
    <item android:state_focused="true" android:color="?background"/> <!-- focused -->
    <item android:color="?foreground"/> <!-- default -->
</selector>

Теперь я хотел бы использовать все это вместе в TextView:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/forground_to_background" />

К сожалению, это не сработает. Вместо того, чтобы иметь красивые зеленые синие цвета, у меня есть только один цвет - красный. TextView всегда красный. Когда я меняю TextView на использование цвета "?", Цвет изменится. Также, когда я меняю цвета, выбирается селектор от "? Xxxx" до жестко заданного значения, так как цвет "# 00f" начинает работать.

Где проблема? Что я делаю неправильно?

Edit: Я считаю, что это дубликат проблемы/ошибки Может ли ресурс селектора использовать цвет, определенный в стиле?

Edit2: Более того, когда я пытаюсь использовать это приложение TextView в приложении ListView, он падает. Он не может анализировать XML.

Ответ 1

Причина, по которой это происходит, заключается в том, что у меня есть другой контекст. Пока раздувание Контекст знает о моей теме attrs, но для адаптера ListView я передал ApplicationContext, который не знал об этих attrs. Теперь я не знаю, почему он не знает о них;)

Ответ 2

Вы не можете ссылаться? attr/при выборе цветов для селектора. Что вы можете сделать, если вы хотите, чтобы цвета в каждой теме были выбраны, создайте несколько селекторов, которые ссылаются на @color/и @drawable/, а затем имеют "ссылку" attr, которая связывает один из селекторов с заданным стилем.

<attr name="forground_to_background" format="reference" />

Затем вам нужно установить цвет текста, например

android:textColor="?attr/forground_to_background"

Я считаю, что текст всегда был красным, потому что Android интерпретировал значение attr integer как цвет (красный), вместо того, чтобы использовать его как поиск того, что вы действительно хотели.

Ответ 3

Вы уверены, что применили MyTheme к активности или текстовому виду? Другая вещь, которую вы можете попробовать, заключается в том, что вместо использования "?" оператора в вашем forground_to_background.xml, вместо этого попробуйте использовать "@". см., устраняет ли это вашу проблему.