Se você está com humor forense, aqui está como cavar e descobrir o que está acontecendo.
android:background="?android:attr/activatedBackgroundIndicator"?
Intuitivamente, isso significa definir o plano de fundo para algum drawable.
Mas vamos decompor isso ainda mais para ver como chegamos ao nosso drawable misterioso.
Para ser mais preciso, significa "definir o atributo background para o que o atributo" enabledBackgroundIndicator " se refere no tema atual .
Se você entendeu a parte "refere-se ao tema atual", basicamente entendeu tudo o que está acontecendo por trás das capas.
Basicamente, activateBackgroundIndicator não é um drawable real, mas uma referência a um drawable . Então, onde o atributo "activateBackgroundIndictor" é realmente definido?
Está definido em seu diretório sdk em um nome de arquivo attrs.xml . Por exemplo:
path_to_android_sdk / platform / android-17 / data / res / values / attrs.xml
Se você abrir esse arquivo, terá a declaração da seguinte forma:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml é onde você declara todos os atributos que mais tarde usará em seu xml de exibição. Observe que estamos declarando o atributo e seu tipo e não realmente atribuindo um valor aqui .
O valor real é atribuído em themes.xml . Este arquivo está localizado em:
path_to_android_sdk / platform / android-17 / data / res / values / themes.xml
Se você abrir esse arquivo, verá as múltiplas definições, dependendo do tema que estiver usando . Por exemplo, aqui estão as definições para os temas chamados Tema, Tema.Luz, Tema.Holo, Tema.Holo.Luz, respectivamente:
<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>
Agora temos nossos drawables misteriosos. Se você escolher o primeiro, ele será definido na pasta drawable em:
path_to_android_sdk / platform / android-17 / data / res / drawable / enabled_background.xml
Se você abrir esse arquivo, verá a definição do drawable, que é importante para entender o que está acontecendo.
<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>
Aqui estamos definindo um drawable com dois estados - o estado padrão é apenas o fundo transparente e se o estado for "state_activated", então nosso drawable é "list_selector_background_selected".
consulte este link para obter informações básicas sobre drawables e estados.
"list_selector_background_selected" é um arquivo png de 9 patch localizado na pasta drawable-hdpi.
Agora você pode ver porque definimos enabledBackgroundIndicator como uma referência em vez de vincular diretamente ao arquivo de drawable - ele permite que você escolha o drawable certo dependendo do seu tema.