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?

Author: Marian Paździoch, 2012-03-23

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

Temat

[25]}domyślne dla najwcześniejszych wersji Androida do 2.3 Gingerbread(10), w tym kilka drobnych zmian stylu w tych wersjach

Theme.Holo

Temat.Holo

[[25]} wprowadzony z Androidem 3.0 Honeycomb (11)

Theme.Material

Temat.Materiał

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ą tylko Theme.
  • 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.

Na przykład najbardziej podstawowa konfiguracja aplikacji o tematyce .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

 66
Author: zapl,
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

 3
Author: 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