Jeśli masz nastrój kryminalistyki, oto jak kopać i dowiedzieć się, co się dzieje.
android:background="?android:attr/activatedBackgroundIndicator"?
Intuicyjnie oznacza to ustawienie tła do rysowania.
Ale rozłóżmy to dalej, aby zobaczyć, jak dojdziemy do naszej tajemniczej narysowanej postaci.
Mówiąc dokładniej, oznacza to „ustaw atrybut tła na to, do czego odwołuje się atrybut„ activBackgroundIndicator ” w bieżącym motywie .
Jeśli rozumiesz „odnosi się do aktualnego tematu”, to w zasadzie zrozumiałeś wszystko, co dzieje się za okładkami.
Zasadniczo ActivatedBackgroundIndicator nie jest faktycznym rysunkiem, ale odniesieniem do rysowalnego . Gdzie właściwie jest zdefiniowany atrybut „activBackgroundIndictor”?
Jest zdefiniowany w katalogu sdk w nazwie pliku attrs.xml . Na przykład:
path_to_android_sdk / platform / android-17 / data / res / values / attrs.xml
Jeśli otworzysz ten plik, otrzymasz oświadczenie w następujący sposób:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml to miejsce, w którym deklarujesz wszystkie atrybuty, których będziesz później używać w swoim pliku widoku XML. Zauważ, że deklarujemy atrybut i jego typ, a nie przypisujemy tutaj wartości .
Rzeczywista wartość jest przypisywana w plikach themes.xml . Ten plik znajduje się pod adresem:
path_to_android_sdk / platform / android-17 / data / res / values / themes.xml
Jeśli otworzysz ten plik, zobaczysz wiele definicji w zależności od używanego motywu . Na przykład, oto definicje motywów nazwanych odpowiednio 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>
Teraz mamy nasze tajemnicze przedmioty do rysowania. Jeśli wybierzesz pierwszy, zostanie on zdefiniowany w folderze do rysowania pod adresem:
path_to_android_sdk / platform / android-17 / data / res / drawable / Activated_background.xml
Jeśli otworzysz ten plik, zobaczysz definicję rysunku, która jest ważna dla zrozumienia, co się dzieje.
<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>
Tutaj definiujemy element rysunkowy z dwoma stanami - domyślnym stanem jest po prostu przezroczyste tło, a jeśli stan to „state_activated”, to naszym elementem do rysowania jest „list_selector_background_selected”.
zobacz ten link, aby uzyskać podstawowe informacje na temat przedmiotów do rysowania i stanów.
„list_selector_background_selected” to plik png z 9 poprawkami, który znajduje się w folderze drawable-hdpi.
Teraz możesz zobaczyć, dlaczego zdefiniowaliśmy activeBackgroundIndicator jako odniesienie, zamiast bezpośredniego łączenia z plikiem do rysowania - pozwala to wybrać odpowiedni element do rysowania w zależności od motywu.