Никак не могу найти хорошей урок по темам для аппликации.
Например есть три кнопки: красная, зеленая и синяя для Светлой темы.
Пользователь выбирает Темную тему, и кнопки должны стать - черная, серая и белая соответственно.
Как это делать? Как указать аппликации использовать тот или иной колор.хмл файл в зависимости от выбранной темы?
Заранее спасибо.
Работа с темами
Re: Работа с темами
Сталкивался с подобной проблемой. Делал так:
values/attrs.xml:
[syntax=xml]<resources>
<!-- Colors -->
<attr name="my_color" format="reference"/>
</resources>[/syntax]
values/styles.xml:
[syntax=xml]
<style name="Theme.My.Dark" parent="@style/Theme.Sherlock">
<item name="my_color">@android:color/white</item>
</style>
<style name="Theme.My.Light" parent="@style/Theme.Sherlock.Light">
<item name="my_color">@android:color/black</item>
</style>[/syntax]
Далее должно быть что-то вроде:
[syntax=xml]
<TextView android:id="@+id/tv"
android:textColor="?attr/my_color"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>[/syntax]
Но тут возникает проблема с устройствами HTC (падает приложение, уже не помню причину).
Потому пришлось получать цвет программно:
[syntax=java]
TypedArray a = getTheme().obtainStyledAttributes(new int[] {R.attr.my_color});
tv.setTextColor(a.getColor(0, Color.BLACK));[/syntax]
Можно тоже самое делать не только с цветами, но и с иконками. Например:
[syntax=xml]<menu
<item android:id="@+id/menu_add"
android:icon="?attr/menu_add_icon"
android:title="@string/menu_add"
android:showAsAction="ifRoom"/>
</menu>[/syntax]
в menu item можно указывать иконку и в xml, устройства HTC в данном случае не ругаются.
values/attrs.xml:
[syntax=xml]<resources>
<!-- Colors -->
<attr name="my_color" format="reference"/>
</resources>[/syntax]
values/styles.xml:
[syntax=xml]
<style name="Theme.My.Dark" parent="@style/Theme.Sherlock">
<item name="my_color">@android:color/white</item>
</style>
<style name="Theme.My.Light" parent="@style/Theme.Sherlock.Light">
<item name="my_color">@android:color/black</item>
</style>[/syntax]
Далее должно быть что-то вроде:
[syntax=xml]
<TextView android:id="@+id/tv"
android:textColor="?attr/my_color"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>[/syntax]
Но тут возникает проблема с устройствами HTC (падает приложение, уже не помню причину).
Потому пришлось получать цвет программно:
[syntax=java]
TypedArray a = getTheme().obtainStyledAttributes(new int[] {R.attr.my_color});
tv.setTextColor(a.getColor(0, Color.BLACK));[/syntax]
Можно тоже самое делать не только с цветами, но и с иконками. Например:
[syntax=xml]<menu
<item android:id="@+id/menu_add"
android:icon="?attr/menu_add_icon"
android:title="@string/menu_add"
android:showAsAction="ifRoom"/>
</menu>[/syntax]
в menu item можно указывать иконку и в xml, устройства HTC в данном случае не ругаются.
Re: Работа с темами
Еще одна бессонная ночь, но оно того стоило )
Очень понятный и развернутый ответ, большой спасибо земляк(20 лет прожил в Красноярске)
В drawable нельзя использовать атрибуты, пришлось создавать двух видов и в зависимости от темы использовать тот или иной drawable.
Задам еще вопрос.
Как решить проблему с темами андроида, для разных версий. Используя ХОЛО тему как родительскую для версии андроид 3+, программка выглядит замечательно. А на теме LIGHT для андроида 2, выглядит, мягко говоря, очень страшненько.
Очень понятный и развернутый ответ, большой спасибо земляк(20 лет прожил в Красноярске)
В drawable нельзя использовать атрибуты, пришлось создавать двух видов и в зависимости от темы использовать тот или иной drawable.
Задам еще вопрос.
Как решить проблему с темами андроида, для разных версий. Используя ХОЛО тему как родительскую для версии андроид 3+, программка выглядит замечательно. А на теме LIGHT для андроида 2, выглядит, мягко говоря, очень страшненько.
Re: Работа с темами
Решилась она относительно просто. Во-первых запускать нужно было как раз таки на эмуляторе с андроидом 2. Во-вторых дописать "недостающий" свойства для элементов (например: высота кнопок, которая в ХОЛО по умолчанию 48дип)