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!
Wenn ich genau verstehe, suchen Sie nach einem Weg zu
Kommen wir dazu.
%Vor%Ein paar Anmerkungen:
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. int[]
ist immer teuer, machen Sie es zu einem static final
. <declare-styleable>
erzeugt ein solches Array und entsprechende Indizes für Sie. Haben Sie diese MultipleThemeMaterialDesign Demo?
Einstellungsaktivität:
%Vor%Siehe vollständiges Beispiel für eine Demo.
Was ist mit der Übergabe der Themen-ID über Intent
?
Und dann in onCreate
:
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%Tags und Links android android-activity themes colors