Налаштування панелі меню фонового зображення та стійкості Android - Використання атрибута у старих версіях спричиняє збій - Чи існує підхід теми / шаблону?


74

В 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наборі ресурсів, одну в звичайному наборі ресурсів. Однак це трохи менше СУХОГО, ніж я хотів би, оскільки основна частина макета однакова, лише цей атрибут або включений, або пропущений.

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

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

Хто-небудь розробляв шаблон для використання "активованого" на 3.0 та пропускання його на попередньому 3.0, окрім окремих макетів?

Дякую!


Не можете <включити /> працювати тут? Або різні версії теми, можливо?
alexanderblom

@alexanderblom: <include>тут не допомогло б - мені потрібен фон у кореневому елементі макета рядка. "різні версії теми", безумовно, у сфері можливостей, але саме тому я задаю питання. :-)
CommonsWare

так, на перший погляд теми розділили -v11 або, здається, не такий шлях. Менше копіювання / вставки, що робить принаймні весь макет: /
Nathan Schwermann

Крім того, як щодо @android:color/transparent?
Роман Нурік,

@ Роман Нурік: Я припускаю, ви маєте на увазі це на відміну від @null? Це може спрацювати. Поза манжетою, я вважаю, що стилістичний підхід до контурів Ель буде більш "правильним", з точки зору вірності баченню Android - чи згодні ви? Врешті-решт, зрештою, це питання стосується менше мене, а більше того, що я розповідаю своїм читачам, тому я хочу піти шляхом, яким Google хотів би, щоб використовували розробники Android.
CommonsWare

Відповіді:


57

Стилі - твій друг ....

Мають два каталоги значень, один - values-v11, інший - значення за замовчуванням.

Кожен каталог значень містить styles.xml, різниця полягає в тому, що значення за замовчуванням містяться в одному;

<style name="listViewActivatedStyle"/>

Значення-v11 містить;

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

Тоді ви можете мати єдиний макет, який використовує;

style="@style/listViewActivatedStyle"

і вибрано відповідний.


9
Здається, це працює. Звичайно, зараз я повинен досить добре переглядати стилі та подібні, щоб написати про це главу, тому я можу краще пояснити, як використовувати цей підхід у книзі. Я так не чекаю цього. :-( Однак, дякую за допомогу!
CommonsWare

25
Радий допомогти. Ваші книги вирили мене з достатньої кількості дірок у знаннях, я радий, що можу щось повернути.
Аль Саттон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.