2016-04-07 7 views
0

Я хочу динамически изменять цвет оттенка 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? Есть ли более простой способ сделать это? Я переусердствовал?

ответ

0

это выглядит как тонирование в CheckedTextView довольно плохой. В конце концов я решил ее поменяв цвета в onClickListener:

checkedTextView.setOnClickListener { 
    if (checkedTextView.isChecked) { 
     checkedTextView.checkMarkTintList = ColorStateList.valueOf(color1) 
    } else { 
     checkedTextView.checkMarkTintList = ColorStateList.valueOf(color2) 
    } 
} 

(пример в Котлин, Java похож)

 Смежные вопросы

  • Нет связанных вопросов^_^