Якщо у вас криміналістичний настрій, ось як копати і з’ясувати, що відбувається.
android:background="?android:attr/activatedBackgroundIndicator"?
Інтуїтивно це означає, що встановіть фон для певного малювання.
Але давайте розкладемо це далі, щоб побачити, як ми дійдемо до нашого таємничого малювального.
Якщо бути точнішим, це означає "встановити атрибут фону на те, до чого відноситься атрибут" activBackgroundIndicator " у поточній темі .
Якщо ви розумієте частину "посилання у поточній темі", ви в основному зрозуміли все, що відбувається за обкладинками.
По суті, activBackgroundIndicator - це не фактичний малювальник, а посилання на його . То де насправді визначено атрибут "activateBackgroundIndictor"?
Це визначено у вашому каталозі sdk в назві файлу attrs.xml . Наприклад:
path_to_android_sdk / platform / android-17 / data / res / values / attrs.xml
Якщо ви відкриєте цей файл, ви зробите декларацію наступним чином:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml - це місце, де ви оголошуєте всі атрибути, які згодом будете використовувати у своєму поданні xml. Зверніть увагу, що ми оголошуємо атрибут та його тип, а насправді не призначаємо тут значення .
Фактичне значення присвоюється в themes.xml . Цей файл знаходиться за адресою:
path_to_android_sdk / platform / android-17 / data / res / values / themes.xml
Якщо відкрити цей файл, ви побачите кілька визначень залежно від теми, яку ви використовуєте . Наприклад, ось визначення для назв тем Theme, Theme.Light, Theme.Holo, Theme.Holo.Light відповідно:
<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
Тепер у нас є свої таємничі малюнки. Якщо ви виберете перший, це буде визначено в папці, яку можна малювати за адресою:
path_to_android_sdk / платформи / android-17 / data / res / drawable / activ_background.xml
Якщо відкрити цей файл, ви побачите визначення малюваного, що важливо для розуміння того, що відбувається.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
<item android:drawable="@color/transparent" />
</selector>
Тут ми визначаємо, що можна малювати з двома станами - стан за замовчуванням - це просто прозорий фон, і якщо стан "активований", тоді наш малювальний файл "list_selector_background_selected".
дивіться це посилання для отримання довідкової інформації щодо чернеток та штатів.
"list_selector_background_selected" - це файл із 9 патчами у форматі PNG, який знаходиться в папці drawable-hdpi.
Тепер ви можете зрозуміти, чому ми визначили activBackgroundIndicator як посилання, а не як посилання безпосередньо на файл, який можна малювати - це дозволяє вибрати правильний малюнок залежно від вашої теми.