Ich versuche ein ColorStateList
programmgesteuertes Erstellen mit diesem:
ColorStateList stateList = new ColorStateList(states, colors);
Ich bin mir aber nicht sicher, was die beiden Parameter sind.
Gemäß Dokumentation:
public ColorStateList (int[][] states, int[] colors)
In API-Ebene 1 hinzugefügt
Erstellt eine ColorStateList, die die angegebene Zuordnung von Status zu Farben zurückgibt.
Kann mir bitte jemand erklären, wie man das erstellt?
Was bedeutet zweidimensionales Array für Zustände?
android
android-color
Anukool
quelle
quelle
{pressed}
,{focused}
,{-enabled}
,{}
. Für eine Umschaltfunktion , es könnte sein{checked, pressed}
,{pressed}
,{checked, focused}
,{focused}
,{checked}
,{-enabled}
,{}
. Oder ein Knebel , dass ignoriert konzentrieren:{checked, pressed}
,{pressed}
,{checked}
,{-enabled}
,{}
.Die erste Dimension ist ein Array von Statussätzen, die zweite ist der Statussatz selbst. Das Farbarray listet die Farben für jeden übereinstimmenden Statussatz auf, daher muss die Länge des Farbarrays mit der ersten Dimension des Statusarrays übereinstimmen (oder es stürzt ab, wenn der Status "verwendet" wird). Hier und Beispiel:
hoffe das hilft.
BEARBEITEN Beispiel: Eine XML-Farbstatusliste wie:
würde so aussehen
quelle
new int[]{}
last - wie im letzten Codeblock dieser Antwort gezeigt. Der einzige negierte Wert, den ich normalerweise verwende, ist "-enabled". Ein weiteres Beispiel : Wenn Sie drei verschiedene Farben wünschen: „fokussiert + gedrückt“, „fokussiert + nicht gedrückt“, „gedrückt + nicht fokussiert“, können Sie einfach gesagt{focused, pressed}
,{focused}
,{pressed}
. Das erste "wahre" wird verwendet.{pressed}
,{-pressed}
,{focused}
,{-focused
}. Das Problem ist , dass{pressed}
und{-pressed}
alle Möglichkeiten abdecken (die Taste entweder gedrückt oder nicht gedrückt), so dass keine Farben später aufgeführt werden jemals verwendet werden.!Manchmal reicht das aus:
quelle
Leider funktioniert keine der Lösungen für mich.
Dies ist der Konstruktor aus dem Quellcode:
quelle
Hier ist ein Beispiel für das
ColorList
programmgesteuerte Erstellen eines in Kotlin:quelle
In Anlehnung an die Antwort von Jonathan Ellis können Sie in Kotlin eine Hilfsfunktion definieren, um den Code etwas idiomatischer und leichter lesbar zu machen. Sie können dies stattdessen schreiben:
colorStateListOf
kann wie folgt implementiert werden:Ich habe auch:
Damit ich den gleichen Funktionsnamen aufrufen kann, egal ob es sich um einen Selektor oder eine einzelne Farbe handelt.
quelle
Meine Builder-Klasse zum Erstellen
ColorStateList
Beispiel mit
quelle
Wenn Sie die Ressource Colors.xml verwenden
quelle
getResources()
veraltet, ist es jetztContextCompat.getColor(this,R.color.colorname);
oderContextCompat.getColor(getActivity(),R.color.colorname);
zur Verwendung in einem Fragmentnew int[0]
(als Element in der Liste des ersten Parameters) handelt es sich um ein Array mit der Länge Null, das die Einstellung der Standardfarbe darstellt. Hier ist es das einzige Element, was bedeutet, dass der Farbton auf alle Zustände der Schaltfläche angewendet wird . Dies entsprichtnew int[]{}
der Antwort von Roger Alien.