Jika Anda sedang dalam mood forensik, berikut adalah cara menggali dan mencari tahu apa yang sedang terjadi.
android:background="?android:attr/activatedBackgroundIndicator"?
Secara intuitif ini berarti mengatur latar belakang ke beberapa drawable.
Tapi mari kita uraikan ini lebih jauh untuk melihat bagaimana kita sampai ke drawable misterius kita.
Tepatnya, ini berarti "setel atribut latar belakang ke apa yang dirujuk atribut" activatedBackgroundIndicator " dalam tema saat ini .
Jika Anda memahami bagian "mengacu pada tema saat ini", pada dasarnya Anda telah memahami segala sesuatu yang terjadi di balik sampul.
Pada dasarnya, activatedBackgroundIndicator bukanlah drawable sebenarnya, melainkan referensi ke drawable . Jadi, di mana sebenarnya atribut "activationBackgroundIndictor" didefinisikan?
Ini ditentukan dalam direktori sdk Anda dalam nama file attrs.xml . Sebagai contoh:
path_to_android_sdk / platforms / android-17 / data / res / values / attrs.xml
Jika Anda membuka file itu, Anda akan menerima deklarasi sebagai berikut:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml adalah tempat Anda mendeklarasikan semua atribut yang nantinya akan digunakan dalam tampilan xml Anda. Perhatikan bahwa kami mendeklarasikan atribut dan tipenya dan tidak benar-benar memberikan nilai di sini .
Nilai sebenarnya diberikan di themes.xml . File ini terletak di:
path_to_android_sdk / platforms / android-17 / data / res / values / themes.xml
Jika Anda membuka file itu, Anda akan melihat beberapa definisi tergantung pada tema yang Anda gunakan . Misalnya, berikut adalah definisi untuk nama tema Theme, Theme.Light, Theme.Holo, Theme.Holo.Light masing-masing:
<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>
Sekarang kami memiliki drawable yang misterius. Jika Anda memilih yang pertama, ini ditentukan dalam folder drawable di:
path_to_android_sdk / platforms / android-17 / data / res / drawable / activated_background.xml
Jika Anda membuka file itu, Anda akan melihat definisi drawable yang penting untuk memahami apa yang sedang terjadi.
<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>
Di sini kita mendefinisikan drawable dengan dua status - status default hanyalah latar belakang transparan dan jika statusnya adalah "state_activated" maka drawable kami adalah "list_selector_background_selected".
lihat link ini untuk informasi latar belakang tentang drawable dan status.
"list_selector_background_selected" adalah file png 9 patch yang terletak di folder drawable-hdpi.
Sekarang Anda dapat melihat mengapa kami mendefinisikan activationBackgroundIndicator sebagai referensi daripada menautkan langsung ke file drawable - ini memungkinkan Anda memilih drawable yang tepat bergantung pada tema Anda.