Bei Android-Designs ist es nicht möglich, die einfachste Methode zu verwenden: benutzerdefinierte Farbe pro Thema

8

Ich bin ein Anfänger in Android-Entwicklung und, obwohl Codierung macht Sinn, Android-Themen IMHO nicht

Ich habe Probleme beim Implementieren dieser einfachen Aufgabe:

Ich habe (zum Beispiel) eine Farbe namens "blah"

%Vor%

wird überall in XML-Layouts oder Code und von verschiedenen View-Components als "@ color / blah"

verwendet

Ich möchte diesen Farbwert einfach pro Thema ändern

Wenn ich also MyTheme1 verwende, sollte blah # F0F0F0 sein und wenn ich MyTheme2 verwende, sollte blah # 00FF00

sein

Ich habe über Themen gelesen und kann immer noch nicht herausfinden, wie ich diese einfache Aufgabe implementieren kann, da meine App keine speziellen Stile usw. benötigt, nur Farben pro Thema.

Danke im Voraus

UPDATE:

Nach dem Link von Mohamed_AbdAllah gelang es mir, einige zu erstellen benutzerdefinierte Farben, indem Sie sie in attrs.xml und styles.xml definieren:

attrs.xml

%Vor%

styles.xml

%Vor%

Aber jetzt entsteht ein viel ernsthafteres Problem

Ich kann die Farbe "color_item_title" in jeder Ansicht erfolgreich verwenden, so dass Schaltflächen und Text tatsächlich diese Farbe erhalten.

Aber verwenden Sie das "color_item_title" in benutzerdefinierten Zeichen- oder Listenansichtslayouts (DAS SIND ANSICHTEN, DIE IN RUNTIME INFLATIERT WERDEN) verursacht einen Absturz.

Wenn Sie also "color_item_title" in einem Listview-Listenelement verwenden, stürzt das Layout ab Laufzeit mit einer Inflator Nachricht an dieser Zeile :(

Es stürzt auch bei meinen Zeichen ab: (Inflationsfehler erneut)

%Vor%     
John S 19.05.2013, 10:40
quelle

3 Antworten

3

Nachdem ich gesucht und versucht habe, habe ich den Tipp bekommen, dass es einige Dinge gibt, die man tun kann und einige Dinge, die man nicht kann .

Sie können

a) Definieren Sie Ihre eigenen Attribute in attrs

%Vor%

b) Legen Sie ihre Werte in Ihrer styles.xml

fest %Vor%

c) Verwenden Sie sie in einer beliebigen Ansicht als? color_gallery_backround oder? attr / color_gallery_backround zum Beispiel

%Vor%

DU KANNST

a) Sie können auf dieses Attribut nicht über benutzerdefinierte Zeichnungsobjekte zugreifen, da sie während dieser Zeit nicht gültig sind Inflation

so Sie können nicht verwenden? attr / color_gallery_backround hier:

customhape.xml

%Vor%

b) Sie können nicht auf dieses Attribut in einer Ansicht zugreifen, die während (zum Beispiel) aufgebläht wird eine ListView als ListItem-Ansicht

So hat das Thema "Unterstützung" für Attribute bis mindestens API 10 Tiefenbegrenzungen.

Lösungen

Wie vorgeschlagen, müssen Sie ZWEI separate Zeichenvorlagen mit verschiedenen Farben erstellen und Attribute einrichten, um diese Zeichenfolgen nach Thema zu referenzieren:

attrs.xml

%Vor%

und für jedes Thema, Setup, welches tatsächlich in styles.xml zu verwenden ist:

%Vor%

Sie können nun auf Ihr Zeichenwerkzeug als "gerundetes_Hintergrund" verweisen und es vom Thema auswählen lassen.

Für überhöhte Ansichten in ListView-Listenlayouts müssen Sie Farben programmgesteuert festlegen.

    
John S 19.05.2013 21:49
quelle
0

Sie können nur erreichen, was Sie wollen, indem Sie zwei verschiedene Farben definieren, zum Beispiel blah und blah2 , und in Ihren Designs auf

verweisen     
Blackbelt 19.05.2013 10:49
quelle
0

Es funktioniert für mich, wie John S vorgeschlagen hat, aber in der Attributdefinition musste ich "Farbe | Referenz" hinzufügen, anstatt nur "Referenz". Also sieht meine attrs.xml-Datei so aus:

%Vor%

Beste Wünsche!

    
lgallard 13.01.2015 15:50
quelle