Wie verwende ich das Holo.Light-Thema und greife bei Geräten vor der Wabe auf "Licht" zurück?

77

Ich möchte das Holo.LightThema auf Geräten verwenden, die es unterstützen, und auf das normale LightThema auf anderen Geräten zurückgreifen .

Im Moment Holo.Lightfunktioniert die Referenzierung unter 3.0+ einwandfrei, ältere APIs kehren jedoch einfach zum Standardthema "Dunkel" zurück. Kann ich mit Stilvererbung erreichen, was ich will?

Koi-Fütterung
quelle

Antworten:

182

Sie müssen ein benutzerdefiniertes Thema erstellen und in einigen Verzeichnissen speichern, um dieses Thema endgültig als Standardthema für die App festzulegen

Fügen Sie zunächst in Werten eine theme.xml wie folgt hinzu:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <!-- Any customizations for your app running on pre-3.0 devices here -->
    </style>
</resources> 

Erstellen Sie dann ein Verzeichnis mit dem Namen "values-v11" (Android 3.0+) im res-Verzeichnis und fügen Sie eine Themes.xml wie folgt ein

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
        <!-- Any customizations for your app running on 3.0+ devices here -->
    </style>
</resources>

Erstellen Sie abschließend ein Verzeichnis mit dem Namen "values-v14" (Android 4.0+) im Verzeichnis res und erstellen Sie eine theme.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyAppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
        <!-- Any customizations for your app running on 4.0+ devices here -->
    </style>
</resources>

Mit dem DeviceDefault sieht Ihre App auf jedem Gerät eines Unternehmens (HTC Samsung ...), das erstellte benutzerdefinierte Designs für Android 4 hinzufügt, immer perfekt aus

BEARBEITEN: Die Samsung-Benutzeroberfläche (TouchWiz) respektiert diese Funktion nicht und die Apps sind auf Samsung-Geräten sehr hässlich. Es ist besser, Holo-Thema zu setzen :(

Endlich in Ihrer manifest.xml

 <application
        ...
        android:theme="@style/MyAppTheme">
Aracem
quelle
1
@Aracem, was meinst du mit "sehr hässlich"? Wird es das alte Lichtthema verwenden oder schlimmer?
13.
1
Ich meine, wenn Sie das Thema DeviceDefault in einigen Samsung-Geräten festlegen, ist die Oberfläche wie "nicht fertig" oder leer. Wichtig, ich weiß nicht, ob alle Samsung-Geräte mit Android 4.0+ diesen Fehler haben!
Aracem
"Alle Probleme in der Informatik können durch eine andere Indirektionsebene gelöst werden" :-)
Luis Mendo
Ich bestätige, dass das TouchWiz von Samsung mit Theme.DeviceDefault nicht gut funktioniert. Auf Galaxy Note erscheint mein Dialog mit schwarzem Text und dunklem Hintergrund (also fast unlesbar). Außerdem erscheint die App hinter dem Dialog komplett weiß.
Stan
Ich kann es eigentlich nicht zum Laufen bringen. Ich weiß nicht, was ich vermisse. Ich habe genau diese Anweisungen befolgt, aber es hat sich nichts geändert. Erwähnenswert ist vielleicht, dass ich Phonegap mit nativen Dialogfeldern verwende. Es zeigt es in einem hässlichen schwarzen Dialogfeld an, das 5 Jahre alt aussieht: /
Miles M.
0

Sie können den Hintergrund auch einfach auf Weiß einstellen und dann alle anderen Widgets wie folgt schwarz machen:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    **android:background="#ffffff"
    android:orientation="vertical" >

<TextView
    android:id="@+id/tvText"
    android:text="@string/text"
    **android:textColor="#000000"
    android:textSize="12dp" />
Bewohner
quelle