Ponto de interrogação (?) Em atributos XML para Android

140

Alguém pode explicar o meio de interrogação nos atributos XML do Android?

<TextView    
    style="?android:attr/windowTitleStyle"
    More attributes
/>
Casebash
fonte

Respostas:

132

O ponto de interrogação significa que é uma referência a um valor de recurso no tema atualmente aplicado. Consulte o Guia do desenvolvedor Android da linuxtopia ou o Guia do desenvolvedor android.com para obter mais informações.

\? escapa do ponto de interrogação.

jball
fonte
3
Eu acho que seria melhor apontar o seu segundo link para: developer.android.com/guide/topics/resources/…
Casebash
9
Os artigos do Guia do desenvolvedor foram reestruturados, este é o novo link direto: developer.android.com/guide/topics/resources/…
mernen 30/03/11
3
Eu acho que é mais apropriado dizer? é usado para "Referenciar atributos de estilo" em vez de "referenciar um valor de recurso no tema atualmente aplicado". De acordo com o link do guia do desenvolvedor android.com que você forneceu.
Helin Wang
5
Eu acho que faz mais sentido ao considerar vários temas que contêm o mesmo atributo de recurso personalizado. Digamos que você tenha temas relacionados a filmes como MyThemeTransformers e MyThemeHobbit e ambos tenham um atributo chamado movieIcon. E movieIcon aponta para um recurso @drawable, digamos, um robô ou uma imagem de hobbit, em cada definição de tema. Você pode consultar "? Attr / movieIcon" em qualquer lugar em que o tema estiver em vigor (como em uma barra de ferramentas ou caixa de diálogo ou em qualquer tipo de layout de exibição) e apontará automaticamente para o desenho correto quando você alternar entre temas. Espero que ajude.
Devon Biere
1
@DevonBiere ajudou! Seria ótimo se você enviar seu comentário como resposta.
Alexander Suraphel 01/03
37

O ? permite que você consulte um atributo de estilo em vez de um recurso específico codificado . Consulte "Referenciando atributos de estilo" no Guia do desenvolvedor do Android para obter detalhes.

Então, como isso é realmente útil? Faz mais sentido ao considerar vários temas que contêm o mesmo atributo de recurso personalizado .

Digamos que você tenha temas relacionados a filmes como MyThemeTransformers e MyThemeHobbit e ambos tenham um atributo chamado movieIcon . E esse atributo movieIcon aponta para um recurso @ extraível diferente, como robot.png ou hobbit.png, em cada definição de tema.

Você pode consultar " ? Attr / movieIcon " em qualquer lugar em que o tema estiver em vigor (como em uma barra de ferramentas ou caixa de diálogo ou em qualquer tipo de layout de exibição) e apontará automaticamente para o desenho correto quando você alternar entre temas. Você não precisa de nenhuma lógica dependente de tema para usar os diferentes drawables. Você acabou de definir o atributo movieIcon para cada tema e a estrutura do Android cuida do resto.

Devon Biere
fonte