Ich habe eine App, die ich für Android 2.1, 2.2, 2.3.3, 3.0/3.1 und 4.0.x) entwickeln möchte. Zwischen diesen API-Ebenen gibt es ungefähr 3 verschiedene Arten von Themen. Das neueste 4.0.x-Thema ist Holo.
Wie auch immer, ich möchte, dass meine App das Standarddesign Android für das jeweilige Gerät verwendet. Wenn es sich um ein 4.0.x-Gerät handelt, möchte ich, dass es Holo verwendet. Wenn es sich um ein 2.3.3 I handelt möchte, dass es das Theme dieser Android-Version verwendet. etc ...
Gibt es einen einfachen Weg, dies zu erreichen? Mir ist aufgefallen, dass sie mit 4.0 ein Theme.DeviceDefault
- Thema hinzugefügt haben, das Sie verwenden können, aber dies hilft mir nicht bei älteren API-Levels. Was ist der beste Ansatz dafür?
Derzeit sind bis zu 3, manchmal 4 Designs für Android Geräte) verfügbar (.Light
Variationen und ähnliches nicht enthalten)
Theme
die Standardeinstellung für die frühesten Versionen von Android bis zu 2.3 Gingerbread (10)), einschließlich einiger geringfügiger Stiländerungen in diesen Versionen
Theme.Holo
eingeführt mit Android 3.0 Honeycomb (11)
Theme.Material
neu in Android 5.0 Lollipop (21)
Theme.DeviceDefault
(Könnte alles sein)
eingeführt mit 4.0 Ice Cream Sandwich (14), ein Thema, das vom Gerätehersteller angepasst werden kann. Es stellt das native Erscheinungsbild des Geräts dar - z. B. Holo oder Material auf Nexus-Geräten (& in Android Studios Design-Editor)), möglicherweise etwas Benutzerdefiniertes auf anderen Geräten. Falls "etwas Benutzerdefiniertes" nicht vorhanden ist Als Option müssen diese Geräte mit den Börsenthemen geliefert werden. Apps, die das Börsenthema verwenden möchten, müssen dies jedoch angeben.
Was ist der beste Ansatz dafür?
Die einfachste, aber nicht unbedingt beste Option besteht darin, überhaupt kein Thema zu definieren. Android wählt dann die Standardeinstellung für Sie aus. Android möchte Ihre App jedoch nicht mit Themen überraschen, die Sie nicht erwarten, und greift daher auf das Thema zurück Sie haben wahrscheinlich Ihre App dafür entworfen. Sehen Sie sich dazu den Android:targetSdkVersion
in AndroidManifest.xml
an (der heutzutage über gradle eingestellt werden kann).
Theme
(d. H. API-Level 3-10) abzielen, erhalten nur Theme
.Theme.Holo
.Theme.DeviceDefault
.Da dies nur aus Gründen der Abwärtskompatibilität geschieht, erhalten Sie auf Ihrem alten Gingerbread-Telefon keinen Theme.Material
. Daher kein Thema + Ziel 14+ = Gerätestandard.
Das Ressourcen-Overlay-System von Android ermöglicht die Angabe von Stilen basierend auf der Geräte-API-Ebene. Zum Beispiel verschiedene Versionen eines Stils in res/values-v11
Und res/values-v21
. Dies ist auch, was alle neu erstellten Apps über Android Studio für Sie einrichten.
Das einfachste Setup für eine App mit dem Thema .Light
Sieht beispielsweise so aus:
/res/values/styles.xml
Wird auf jedes Gerät angewendet und dient als Basis
<resources>
<style name="AppTheme" parent="Android:Theme.Light"/>
</resources>
/res/values-v11/styles.xml
Wird auf allen Geräten mit API-Level 11 und höher geladen (einschließlich Geräten mit 21 und höher). Es wird jedoch nur die neueste Version von "AppTheme" verwendet.
<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>
Hinweis: Alternativ dazu sollte die Angabe von Theme.DeviceDefault
In /res/values-v14/styles.xml
Ausreichen, um ein standardmäßiges Erscheinungsbild zu erhalten, das jedoch keine Feinabstimmung des Designs ermöglicht. Es tut nicht weh, die v14-Außerkraftsetzung hinzuzufügen. DeviceDefault und Holo könnten sich doch unterscheiden.
AndroidManifest.xml
Ist der Ort, an dem das benutzerdefinierte Thema verwendet wird. Z.B. als anwendungsweite Voreinstellung:
...
<application
Android:theme="@style/AppTheme"
...
Wählen Sie ein Thema basierend auf der Plattformversion - Offizielles Dokument zum Definieren verschiedener Stile über Ressourcenkonfigurationen
Holo Everywhere - Blogbeitrag, in dem der Standardmechanismus und das DeviceDefault/Holo-Thema erläutert werden
Verwenden des Material-Themas - Materialdokumentation
Sie können ein Thema in Ihrer values / styles.xml deklarieren und es dann in Ihrer values-v11/styles.xml mit der Holo-Version überschreiben:
values / styles.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>
Wenn Sie dies so tun, haben Sie Holo-Themen auf API 11+-Geräten und reguläre Themen auf den anderen.
Grüße Steffen Vangsgaard