state_checkable не работает на представлении, расширяющем проверяемый

У меня есть селектор списка доступных для рисования состояний, который должен отображаться при рисовании.

Я расширил класс View, который использует drawable с интерфейсом Checkable и это работает нормально.

Тем не менее, когда я только фильтр на state_checkable, он отображает изображение для значения false. Я предполагаю, что это означает, что с моей реализацией что-то не так.

<item android:drawable="@drawable/button_6_default" android:state_checkable="false" />
<item android:drawable="@drawable/button_disable_default" android:state_checkable="true" />

Как вы получаете state_checkable а также state_checked правильно работать?

2 ответа

Решение

Я понял. Вам необходимо реализовать onCreateDrawableState и добавьте state_checked attr, если представление вызывается после вызова super с увеличенным количеством добавленных вами дополнительных атрибутов. У меня нет кода прямо здесь, извините.

Расширение предыдущего ответа для всех, кому может понадобиться фактический код для метода onCreateDrawableState. Это извлечено из этой библиотеки: https://github.com/ManuelPeinado/MultiChoiceAdapter

private static final int[] CHECKED_STATE_SET = {
  android.R.attr.state_checked
};

@Override
protected int[] onCreateDrawableState(int extraSpace) {
  final int[] drawableState = super.onCreateDrawableState(extraSpace + 2);
  if (isChecked) {
       mergeDrawableStates(drawableState, CHECKED_STATE_SET);
  }
  return drawableState;
}
Другие вопросы по тегам