суббота, 20 апреля 2013 г.

Android: пишем свои стили для ActionBarSherlock и HoloEverywhere

Использовать все время стандартные стили скучно. Да это и может не отвечать требованиям к дизайну конкретного приложения. Поэтому рано или поздно захочется сделать свои стили (темы). Для того, чтобы сэкономить некоторое время, расскажу о самых заметных граблях.

Генератор стилей

Конечно же, начинать работу со стилями луче не с нуля, а с использования генератора стилей. И тут нас поджидает засада №1: генератор не может отдать пакет, который будет работать одновременно и в Android 2.* + ABS + HE, и в Android 4.*. Связано это с тем, что стили он именует либо в новой нотации ("android:actionBarStyle"), либо в старой ("actionBarStyle"), но не одновременно. Поэтому придется дописывать блок с именами стилей вручную. Ну и не забудьте, конечно, указать теме правильного родителя (например, Holo.Theme.Light.DarkActionBar).

Применение стилей

Дальше мы начинаем применять стили и... HoloEverywhere тупо вылетает на том, что это не его стандартный стиль. Что же делать? Иногда помогает переименование своего стиля в "AppTheme", но если серьезно доработать стиль (чтобы применять его для элементов HE, а не только ABS), то и это не помогает. На помощь приходит решение, подсмотренное на (сюрприз! сюрприз!) Stack Overflow: в design-time выставляем стандартную тему, а первой строкой onCreate(), даже до вызова super пишем:
setTheme(R.style.AppTheme);
И voila, как говорят французы. Все работает!

Комментариев нет: