2013-05-19 3 views
8

Я новичок в разработке Android и, хотя кодирование делает совершенное чувство, андроид тему ИМХО неAndroid темы Проблема реализации простейшее: обычая каждой темы цвета

У меня есть проблемы, реализующая эта простая задача:

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

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

, который используется повсеместно в макетах XML или кода и другой точки зрения complonents как «@ цвет/бэ»

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

Так что, когда я использую MyTheme1, мля должен быть # F0F0F0 и когда я использую MyTheme2 БЛА должен быть # 00FF00

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

Thanx заранее

UPDATE:

После ссылки, предоставленной 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 на пользовательских чертежах или списках расписаний (ТО, ЧТО ПРОСМОТРЕТЬ, ЧТО ПОЛУЧИЛО ВО ВРЕМЯ RUNTIME), вызывает сбой.

Таким образом, используя color_item_title внутри ListView ListItem аварий макета в выполнении с сообщением Inflater на эту линии :(

Он также Сбои во время моего вводимого коэффициента: (ошибки инфляции снова)

<?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> 
+3

проверить это [вопрос] (http://stackoverflow.com/questions/8630694/theme-dependent-colors-of-selected-widgets) –

+0

Хотя ваша ссылка предоставила помощь, возникла более серьезная проблема, поэтому я обновил сообщение –

ответ

0

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

3

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

Вы можете

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

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

б) Установите значения в вашем 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> 

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

android:background="?attr/color_gallery_backround" 

Вы наклоняетесь

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

так вы не можете использовать атр/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> 

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

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

Solutions

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

attrs.xml

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

и по каждой теме, которую можно использовать в стилях. 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 вам необходимо программно установить цвета.

0

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

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

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

Смежные вопросы