Я хочу динамически изменять цвет оттенка CheckedTextView
, когда состояние представления checked
. Я уверен, что смогу добиться этого, позвонив по телефону setCheckMarkTintList
по телефону CheckedTextView
. Для этого мне нужен ColorStateList
, но проблема в том, что я хочу сохранить все цвета для каждого состояния CheckedTextView
, за исключением состояния checked
.Как изменить цвет проверенного оттенка проверенногоTextView с шестнадцатеричным значением
Таким образом, я могу получить ColorStateList
от CheckedTextView
, но я не знаю способ изменить только цвета для checked
состояния. Я знаю, что могу создать новый ColorStateList
, но как я могу убедиться, что он сохраняет все значения из оригинала?
я могу создать список состояний, как это:
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
}
И создать список цветов из цветов от оригинального ColorStateList
:
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()
}
Но это будет охватывать только единичные состояния .. . Вы также можете комбинировать состояния, такие как new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed, -android.R.attr.state_checked}
. Было бы смешно пытаться объяснить все возможные состояния, так как я могу узнать, что утверждает исходный ColorStateList
? Есть ли более простой способ сделать это? Я переусердствовал?