Znak zapytania (?) W atrybutach XML dla Androida

140

Czy ktoś może wyjaśnić znak zapytania oznacza w atrybutach XML Androida?

<TextView    
    style="?android:attr/windowTitleStyle"
    More attributes
/>
Casebash
źródło

Odpowiedzi:

132

Znak zapytania oznacza, że ​​jest to odniesienie do wartości zasobu w aktualnie stosowanym motywie. Więcej informacji na ten temat można znaleźć w przewodniku dla programistów linuxtopia dla systemu Android lub w przewodniku dla programistów android.com .

\? ucieka ze znaku zapytania.

jball
źródło
3
Myślę, że lepiej byłoby wskazać drugi link na
adres
9
Artykuły w przewodniku dla programistów zostały
zmienione. Oto
3
Myślę, że lepiej powiedzieć? jest używany do określenia „atrybutów stylu odniesienia” zamiast „odniesienia do wartości zasobu w aktualnie stosowanej kompozycji”. Zgodnie z podanym linkiem do przewodnika dla programistów android.com.
Helin Wang,
5
Myślę, że ma to największy sens, gdy rozważa się wiele motywów zawierających ten sam niestandardowy atrybut zasobów. Załóżmy, że masz motywy związane z filmami, takie jak MyThemeTransformers i MyThemeHobbit, i oba mają atrybut o nazwie movieIcon. A movieIcon wskazuje na zasób @drawable, powiedzmy robota lub obraz hobbita w każdej definicji motywu. Możesz odwołać się do „? Attr / movieIcon” w każdym miejscu, w którym działa motyw (np. Na pasku narzędzi, w oknie dialogowym lub w jakimkolwiek układzie widoku), a po przełączeniu się między motywami automatycznie wskaże właściwy element do rysowania. Mam nadzieję że to pomogło.
Devon Biere
1
@DevonBiere to pomogło! Byłoby wspaniale, gdybyś przesłał swój komentarz jako odpowiedź.
Alexander Suraphel
37

The? umożliwia odwoływanie się do atrybutu stylu zamiast do określonego zasobu zakodowanego na stałe . Aby uzyskać szczegółowe informacje, zobacz „Odwoływanie się do atrybutów stylu” w podręczniku programisty Androida.

Więc jak to jest naprawdę przydatne? Ma to największy sens w przypadku rozważania wielu motywów zawierających ten sam niestandardowy atrybut zasobów .

Załóżmy, że masz motywy związane z filmami, takie jak MyThemeTransformers i MyThemeHobbit, i oba mają atrybut o nazwie movieIcon . Ten atrybut movieIcon wskazuje na inny zasób @drawable, powiedzmy robot.png lub hobbit.png, w każdej definicji motywu.

Możesz odwołać się do „ ? Attr / movieIcon ” w każdym miejscu, w którym działa motyw (np. Na pasku narzędzi, w oknie dialogowym lub w jakimkolwiek układzie widoku), a po przełączeniu się między motywami automatycznie wskaże właściwy element do rysowania. Nie potrzebujesz żadnej logiki zależnej od motywu, aby używać różnych rysunków. Wystarczy zdefiniować atrybut movieIcon dla każdego motywu, a platforma Androida zajmie się resztą.

Devon Biere
źródło