wake-up-neo.net

Wie verwende ich das Standarddesign des Geräts für die App?

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?

41
Jake Wilson

Derzeit sind bis zu 3, manchmal 4 Designs für Android Geräte) verfügbar (.Light Variationen und ähnliches nicht enthalten)

Theme

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

Theme.Holo

eingeführt mit Android 3.0 Honeycomb (11)


Theme.Material

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?

Kein Theme + targetSdkVersion> = 14

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).

  • Apps, die auf alte Plattformen mit nur Theme (d. H. API-Level 3-10) abzielen, erhalten nur Theme.
  • Apps, die auf 11-13 abzielen, erhalten Theme.Holo.
  • 14 oder höher erhalten 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.

Festlegen verschiedener Themen

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"
    ...

Links zu offiziellen Dokumentationen

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

68
zapl

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

3