Motivfarbe dynamisch einstellen

8

Ich verwende Themen (dynamisch) in meiner Android-App, wie folgt:

my_layout.xml (Auszug):

%Vor%

attrs.xml (Auszug):

%Vor%

themes.xml (Auszug):

%Vor%

styles.xml (Auszug):

%Vor%

Wie Sie sehen können, stelle ich die Themen dynamisch ein. Ich verwende diese Klasse:

%Vor%

}

Was ich wissen möchte, gibt es eine Möglichkeit, wie man dies (im Code ändern) im Code? Zum Beispiel habe ich folgenden Code (Auszug):

%Vor%

Dies kann mit einer Hilfsmethode erfolgen, die den Befehl switch für verfügbare Designs verwendet und die richtige Farbe für ein Design zurückgibt. Aber ich würde gerne wissen, ob es einen besseren, schöneren und schnelleren Weg gibt.

Danke!

    
Tom11 21.03.2017, 09:06
quelle

5 Antworten

4

Ich habe es endlich mit der folgenden Methode gemacht:

%Vor%

Dies gibt die Farbe entsprechend meinem Thema zurück (ich habe Präfixe verwendet).

    
Tom11 29.03.2017, 11:19
quelle
3

Wenn ich genau verstehe, suchen Sie nach einem Weg zu

  1. Extrahiere einen Stil aus einem Thema,
  2. extrahiert einen Wert (Textfarbe) aus diesem Stil.

Kommen wir dazu.

%Vor%

Ein paar Anmerkungen:

  1. TypedArray unterstützt nicht das Abrufen von Vektorzeichnungen und Themenreferenzen in Farbstatuslisten auf älteren API-Ebenen. Wenn Sie bereit sind, die interne AppCompat-API zu verwenden, können Sie TintTypedArray versuchen.
  2. Die Zuweisung von int[] ist immer teuer, machen Sie es zu einem static final .
  3. Wenn Sie mehrere Attribute gleichzeitig auflösen wollen, muss das Array von Attributen sortiert werden! Sonst stürzt es manchmal ab. <declare-styleable> erzeugt ein solches Array und entsprechende Indizes für Sie.
Eugen Pechanec 23.03.2017 20:10
quelle
1

Haben Sie diese MultipleThemeMaterialDesign Demo?

Einstellungsaktivität:

%Vor%

Siehe vollständiges Beispiel für eine Demo.

    
Pratik Butani 29.03.2017 10:07
quelle
0

Was ist mit der Übergabe der Themen-ID über Intent ?

? %Vor%

Und dann in onCreate :

%Vor%     
Oleksii K. 28.03.2017 12:04
quelle
0

Angesichts der Tatsache, dass jede Ressource ein Feld in der R-Klasse ist, können Sie mithilfe von Reflektion nach ihnen suchen. Das ist teuer, aber da Sie einen int-Wert erhalten, können Sie sie speichern, nachdem Sie sie erhalten haben, und den Leistungsabfall vermeiden. Und da die Methoden, die Ressourcen verwenden, einen int enthalten, können Sie eine int-Variable als Platzhalter verwenden und dann die gewünschte Farbe einfügen.

um eine Ressource zu bekommen:

%Vor%

Die Funktion:

%Vor%

Arbeitsversion hier: Ссылка

Diese Behandlung gilt für alle Android-Ressourcen. Sie können das Thema auch auf diese Weise festlegen, anstatt Zwischenvariablen zu verwenden:

%Vor%     
Fco P. 30.03.2017 04:59
quelle