Работа с темами

Ответить
xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Работа с темами

Сообщение xr0m » 15 апр 2013, 22:08

Никак не могу найти хорошей урок по темам для аппликации.

Например есть три кнопки: красная, зеленая и синяя для Светлой темы.
Пользователь выбирает Темную тему, и кнопки должны стать - черная, серая и белая соответственно.
Как это делать? Как указать аппликации использовать тот или иной колор.хмл файл в зависимости от выбранной темы?

Заранее спасибо.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Работа с темами

Сообщение klblk » 17 апр 2013, 06:36

Сталкивался с подобной проблемой. Делал так:
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 в данном случае не ругаются.

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Работа с темами

Сообщение xr0m » 19 апр 2013, 14:32

Еще одна бессонная ночь, но оно того стоило )
Очень понятный и развернутый ответ, большой спасибо земляк(20 лет прожил в Красноярске)

В drawable нельзя использовать атрибуты, пришлось создавать двух видов и в зависимости от темы использовать тот или иной drawable.

Задам еще вопрос.

Как решить проблему с темами андроида, для разных версий. Используя ХОЛО тему как родительскую для версии андроид 3+, программка выглядит замечательно. А на теме LIGHT для андроида 2, выглядит, мягко говоря, очень страшненько.

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Работа с темами

Сообщение xr0m » 20 апр 2013, 09:27

Решилась она относительно просто. Во-первых запускать нужно было как раз таки на эмуляторе с андроидом 2. Во-вторых дописать "недостающий" свойства для элементов (например: высота кнопок, которая в ХОЛО по умолчанию 48дип)

Ответить