Проблемы с Android-темами, в которых реализовано самое простое: пользовательский цвет для каждой темы

Я новичок в разработке Android и, хотя кодирование делает идеальный смысл, темы андроид IMHO не делают

У меня проблемы с выполнением этой простой задачи:

У меня (например) цвет под названием «бла»,

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="blah">#F0F0F0</color> <resources> 

Который используется повсеместно в XML-макетах или кодексах и с помощью различных наблюдателей в качестве «@ color / blah»,

Я просто хотел бы изменить это значение цвета на тему

Поэтому, когда я использую MyTheme1, blah должен быть # F0F0F0, и когда я использую MyTheme2, blah должен быть # 00FF00

Я читал о темах и все еще не могу понять, как реализовать эту простую задачу, поскольку мое приложение не требует специальных стилей и т. Д., Только цвета для каждой темы.

Thanx заранее

ОБНОВИТЬ:

После ссылки, предоставленной Mohamed_AbdAllah, мне удалось создать некоторые пользовательские цвета, определив их в attrs.xml и styles.xml:

attrs.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="color_item_title" format="color|reference" /> </resources> 

styles.xml

 <style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="color_item_title">@color/White</item> </style> 

Но теперь возникает гораздо более серьезная проблема

Я могу успешно использовать цвет? Color_item_title в каждом представлении, поэтому кнопки и текст на самом деле получают этот цвет.

Но с помощью этого? Color_item_title на пользовательских чертежах или макетах listview (ТО, ЧТО ПРОСМОТРЕТЬ, ЧТО ПОЛУЧИЛО ВО ВРЕМЯ RUNTIME), приводит к сбою.

Таким образом, использование? Color_item_title внутри раскладки listitem разбивается во время выполнения с сообщением надувателя в этой строке 🙁

Он также разбивается по моим чертежам: (снова ошибка инфляции)

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@color/Black" /> <corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> <stroke android:width="1dp" android:color="?color_item_title" /> </shape> 

После поиска и попытки, я получил подсказку, что есть некоторые вещи, которые вы можете сделать, и некоторые вещи, которые вы не можете .

Ты можешь

A) Определите свои собственные атрибуты в attrs

 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="color_gallery_backround" format="color|reference" /> </resources> 

B) Задайте свои значения в ваших styles.xml

 <style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="color_gallery_backround">@color/White</item> </style> <style name="AppBaseThemeWhite" parent="android:Theme.Light"> <item name="color_gallery_backround">@color/Black</item> </style> 

C) Используйте их в любом представлении как? Color_gallery_backround или? Attr / color_gallery_backround, например

 android:background="?attr/color_gallery_backround" 

ВЫ ХОТИТЕ

A) Вы не можете получить доступ к этому атрибуту из пользовательских чертежей, поскольку они недействительны во время инфляции

Так что вы не можете использовать? Attr / color_gallery_backround здесь:

customshape.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="**?attr/color_gallery_backround**" /> <stroke android:width="2dp" android:color="@color/Black" /> </shape> 

B) Вы не можете получить доступ к этому атрибуту в представлении, которое будет накачаться во время (например) ListView в виде ListItem

Таким образом, тема «поддержка» атрибутов, по крайней мере, до API 10 имеет пределы глубины.

Решения

Как и было предложено, вам нужно создать ДВОЙНЫЕ отдельные чертежи с использованием разных цветов и настроить атрибуты для ссылки на эти чертежи в соответствии с темой:

attrs.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="rounded_background" format="reference" /> </resources> 

И по каждой теме, настройка, которая действительно доступна для использования в styles.xml:

 <resources> <style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="rounded_background">@drawable/round_rect_shape_dark</item> </style> <style name="AppBaseThemeLight" parent="android:Theme.Light"> <item name="rounded_background">@drawable/round_rect_shape_white</item> </style> </resources> 

Теперь вы можете ссылаться на свой drawable как? Rounded_background, и пусть тема выбирает его.

Для раздутых представлений в списках ListView listitem вы должны программно устанавливать цвета.

Единственный способ добиться того, что вы хотите, – это определить два разных цвета, например blah и blah2 , и ссылаться на них в своих темах

Это работает для меня, как предложил Джон С., но в определении атрибутов мне пришлось добавить «color | reference» вместо «reference». Поэтому мой файл attrs.xml выглядит так:

 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="rounded_background" format="color|reference" /> </resources> 

Лучшие реганы!