Ich möchte die Tönungsfarbe einer CheckedTextView
dynamisch ändern, wenn der Status der Ansicht checked
ist. Ich bin mir ziemlich sicher, dass ich das erreichen kann, indem ich setCheckMarkTintList
auf dem CheckedTextView
rufe. Um dies zu tun, brauche ich eine ColorStateList
, aber das Problem ist, ich möchte alle Farben für jeden Zustand der CheckedTextView
, mit Ausnahme der checked
Zustand beibehalten.So ändern Sie die überprüfte Tönungsfarbe einer CheckedTextView mit Hexadezimalwert
So kann ich die ColorStateList
der CheckedTextView
erhalten, aber ich weiß nicht, von einer Art und Weise nur die Farbe für den checked
Zustand zu ändern. Ich weiß, ich kann eine neue ColorStateList
erstellen, aber wie stelle ich sicher, dass es alle Werte aus dem Original behält?
kann ich einen Zustand Liste wie folgt erstellen:
int[][] states = new int[][] {
new int[]{android.R.attr.state_pressed},
new int[]{-android.R.attr.state_pressed},
new int[]{android.R.attr.state_focused},
new int[]{-android.R.attr.state_focused},
new int[]{android.R.attr.state_selected},
new int[]{-android.R.attr.state_selected},
new int[]{android.R.attr.state_checkable},
new int[]{-android.R.attr.state_checkable},
new int[]{android.R.attr.state_checked},
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_enabled},
new int[]{-android.R.attr.state_enabled},
new int[]{android.R.attr.state_window_focused},
new int[]{-android.R.attr.state_window_focused},
new int[]{} // default state
}
und eine Farbliste aus den Farben aus dem ursprünglichen ColorStateList
erstellen:
int[] colors = new int[] {
stateList.getColorForState(new int[]{android.R.attr.state_pressed}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_pressed}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{android.R.attr.state_focused}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_focused}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{android.R.attr.state_selected}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_selected}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{android.R.attr.state_checkable}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_checkable}, stateList.getDefaultColor()),
Color.parseColor(colorHexValue),
stateList.getColorForState(new int[]{-android.R.attr.state_checked}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{android.R.attr.state_enabled}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_enabled}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{android.R.attr.state_window_focused}, stateList.getDefaultColor()),
stateList.getColorForState(new int[]{-android.R.attr.state_window_focused}, stateList.getDefaultColor()),
stateList.getDefaultColor()
}
Dies würde aber die Einzelstaaten nur decken .. Sie können auch Zustände wie new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed, -android.R.attr.state_checked}
kombinieren. Es wäre lächerlich zu versuchen, jeden möglichen Zustand zu berücksichtigen, also wie kann ich möglicherweise wissen, was das Original ColorStateList
gesetzt hat? Gibt es einen einfacheren Weg, dies zu tun? Übertreibe ich es?