Настройка Android Background & Persistence Bar Menu Bar - Использование атрибута в более старых версиях вызывает сбой - Есть ли подход к теме / шаблону?

В Android 3.0 понятие «проверено» может отображаться с использованием «активированного» фона. Это дает вам постоянную панель, которую вы видите, когда вы нажимаете на фрагмент списка, обеспечивая контекст для фрагмента справа от списка (например, нажатие на папку в Gmail выделяет эту папку и открывает другой фрагмент списка, чтобы показать разговоры в этой папке ).

Например, образцы фрагментов показывают такие вещи, как:

setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));

Этот ресурс (android.R.layout.simple_list_item_activated_1) является новым для Android 3.0. Что делает его «активированным»:

android:background="?android:attr/activatedBackgroundIndicator"

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

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

Я попытался использовать псевдонимы ресурсов для рисования, поэтому android:background мог ссылаться на псевдоним, а псевдоним мог обрабатывать дифференциацию -v11, но <bitmap> drawables, похоже, не любит android:src="@null".

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

Кто-нибудь разработал шаблон для использования «активированного» в версии 3.0 и пропуска его в версиях до 3.0, помимо отдельных макетов?

Спасибо!


person CommonsWare    schedule 11.03.2011    source источник
comment
‹включить /› здесь нельзя? Или разные версии темы, может быть?   -  person alexanderblom    schedule 11.03.2011
comment
@alexanderblom: <include> здесь не поможет - мне нужен фон для корневого элемента макета строки. разные версии темы, безусловно, возможны, но именно поэтому я задаю вопрос. :-)   -  person CommonsWare    schedule 11.03.2011
comment
да, на первый взгляд темы разделены -v11 или нет, кажется, это путь. Меньше копирования/вставки, по крайней мере, для всего макета :/   -  person Nathan Schwermann    schedule 11.03.2011
comment
Кроме того, как насчет @android:color/transparent ?   -  person Roman Nurik    schedule 11.03.2011
comment
@Roman Nurik: Я предполагаю, что вы имеете в виду это, а не @null? Это может сработать. Навскидку, я бы подумал, что стили, похожие на контуры Эла, были бы более правильными с точки зрения верности видению Android — вы согласны? В конце концов, этот вопрос не столько обо мне, сколько о том, что я рассказываю своим читателям, поэтому я хочу пойти по пути, который Google хотел бы использовать для разработчиков Android.   -  person CommonsWare    schedule 11.03.2011
comment
@CommonsWare определенно более правильно использовать стили (даже лучше с родительскими стилями), но хотел закрыть цикл по проблеме @null :-)   -  person Roman Nurik    schedule 11.03.2011
comment
@CommonsWare, вы уже должны погрузиться в стили, после того, как вы введете начальное время, они действительно сэкономят вам массу времени при создании макетов в долгосрочной перспективе. Я уверен, что вашим читателям понравятся некоторые советы ;-)   -  person Nathan Schwermann    schedule 12.03.2011
comment
@CommonsWare просто хочу поболтать с вами, скажите, пожалуйста, когда и где вы будете доступны? Заранее спасибо. Это срочно.   -  person Varun Vishnoi    schedule 06.11.2012


Ответы (1)


Стили - ваш друг....

Имейте два каталога значений, один - значения-v11, другой - значения по умолчанию.

Каждый каталог значений содержит файл styles.xml, разница в том, что он содержит значения по умолчанию;

<style name="listViewActivatedStyle"/>

Значения-v11 содержат;

<style name="listViewActivatedStyle">
   <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>

Тогда у вас может быть один макет, который использует;

style="@style/listViewActivatedStyle"

и подбирается подходящий.

person Al Sutton    schedule 11.03.2011
comment
Кажется, это работает. Конечно, теперь я должен достаточно вникнуть в стили и тому подобное, чтобы написать об этом главу, чтобы я мог лучше объяснить, как использовать этот подход в книге. Я поэтому этого не жду. :-( Однако спасибо за помощь! - person CommonsWare; 11.03.2011
comment
Рад помочь. Ваши книги вытащили меня из достаточного количества дыр в знаниях, и я счастлив, что могу чем-то отблагодарить. - person Al Sutton; 11.03.2011