Jak używać domyślnego motywu urządzenia dla aplikacji?
Mam aplikację, którą chcę opracować dla Androida 2.1, 2.2, 2.3.3, 3.0/3.1 i 4.0.x. pomiędzy tymi poziomami API istnieje około 3 różnych typów motywów. Najnowsza wersja 4.0.motyw x to Holo.
Tak czy inaczej, chcę, aby moja aplikacja używała domyślnego motywu Androida dla dowolnego urządzenia, na którym jest. Jeśli jest na 4.0.urządzenie x, chcę użyć Holo. Jeśli jest na 2.3.3 chcę, aby używał motywu z tej wersji Androida. itd...
Czy jest prosty sposób, aby to zrobić? Zauważyłem, że z 4.0, dodali motyw Theme.DeviceDefault
, którego możesz użyć, ale to nie pomaga mi w starszych poziomach API. Jakie jest najlepsze podejście do tego?
2 answers
Obecnie dostępne są do 3, czasami 4 motywy dla urządzeń z Androidem (odmiany.Light
i podobne nie są dołączone) [26]}
Theme
[25]}domyślne dla najwcześniejszych wersji Androida do 2.3 Gingerbread(10), w tym kilka drobnych zmian stylu w tych wersjach
Theme.Holo
[[25]} wprowadzony z Androidem 3.0 Honeycomb (11)
Theme.Material
Nowość w Androidzie 5.0 Lollipop (21)
Theme.DeviceDefault
(Może być cokolwiek)
Wprowadzony wraz z 4.0 Ice Cream Sandwich (14), motywem, który może być dostosowywany przez producenta urządzenia. Reprezentuje natywny wygląd urządzenia - tj. Holo lub materiał na urządzeniach Nexus (&w edytorze projektowym Android Studio), może coś niestandardowego na innych urządzeniach. W przypadku, gdy "coś niestandardowego" nie jest opcją, urządzenia te muszą pochodzić z tematy giełdowe. Aplikacje, które chcą motywu akcji, muszą go jednak określić.
Jakie jest najlepsze podejście do tego?
No theme + targetSdkVersion >= 14
Najprostszą, ale niekoniecznie najlepszą opcją jest zdefiniowanie żadnego tematu. Android wybierze domyślny dla Ciebie. Ale Android nie chce zaskakiwać aplikacji motywami, których się nie spodziewasz, więc wraca do motywu, dla którego prawdopodobnie zaprojektowałeś swoją aplikację. Czyni to przez patrząc na android:targetSdkVersion
wewnątrz AndroidManifest.xml
(które można obecnie ustawić za pomocą gradle).
- aplikacje, które są skierowane na Stare platformy, które miały tylko
Theme
(tj. poziomy API 3-10), otrzymają tylkoTheme
. - aplikacje kierujące 11-13 get
Theme.Holo
. - 14 lub wyżej otrzyma
Theme.DeviceDefault
.
Ponieważ jest to tylko dla wstecznej kompatybilności, nie dostaniesz Theme.Material
na starym telefonie z piernika. Dlatego nie motyw + cel 14 + = urządzenie domyślne.
Tematy
System nakładania zasobów Androida pozwala określić Style na podstawie poziomu API urządzenia. Na przykład różne wersje stylu w res/values-v11
i res/values-v21
. To jest również to, co każda nowo utworzona aplikacja za pośrednictwem Android Studio skonfiguruje dla Ciebie.
.Light
wygląda tak:
/res/values/styles.xml
jest stosowany do każdego urządzenia i służy jako podstawa
<resources>
<style name="AppTheme" parent="android:Theme.Light"/>
</resources>
/res/values-v11/styles.xml
jest ładowany na wszystkie urządzenia posiadające API na poziomie 11 i wyższym (w tym te, które są 21 i powyżej). Ale tylko najnowsza wersja "AppTheme" jest rzeczywiście używany.
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light"/>
</resources>
/res/values-v21/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light"/>
</resources>
Uwaga: alternatywnie określenie Theme.DeviceDefault
w /res/values-v14/styles.xml
powinno wystarczyć, aby mieć domyślny wygląd, ale nie pozwala to na precyzyjne dostrojenie projektu. Nie zaszkodzi dodać obejście v14. DeviceDefault i Holo mogą być jednak inne.
AndroidManifest.xml
to miejsce, w którym jest używany niestandardowy motyw. Np. jako szerokie zastosowanie domyślnie:
...
<application
android:theme="@style/AppTheme"
...
Linki do oficjalnej dokumentacji
Wybierz motyw oparty na wersji platformy - oficjalny dokument do definiowania różnych stylów za pomocą konfiguracji zasobów
Holo Everywhere - wpis na blogu wyjaśniający domyślny mechanizm i DeviceDefault / Holo theme
Korzystanie z motywu materiałowego - dokumentacja materiałowa
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 00:42:18
Możesz zadeklarować motyw w swoich wartościach/stylach.xml, a następnie w wartościach-V11 / styles.XML nadpisuje go za pomocą Holo-wersji:
Wartości / style.xml:
<style name="DialogTheme" parent="@android:style/Theme.Dialog"></style>
Values-v11 / styles.xml:
<style name="DialogTheme" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"></style>
Zrób to w ten sposób, a będziesz miał motywy Holo na urządzeniach API 11+ i zwykłe motywy na innych.
Pozdrawiam Steffen Vangsgaard
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 18:46:25