Drawable.setState() Как я могу управлять конкретным состоянием?

У меня есть такая возможность:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true"
      android:state_window_focused="true"
      android:drawable="@drawable/seek_thumb_pressed" />

<item android:state_focused="true"
      android:state_window_focused="true"
      android:drawable="@drawable/seek_thumb_selected" />

<item android:state_selected="true"
      android:state_window_focused="true"
      android:drawable="@drawable/seek_thumb_selected" />

<item android:drawable="@drawable/seek_thumb_normal" />

В коде, как мне установить свое конкретное состояние Drawable? Я хотел бы установить его в состояние state_pressed = true.

Ответ 1

Получил это. Комментарий отсюда помог: Android: как программно обновить селектор (StateListDrawable)

Итак, Drawable.setState() принимает массив в целых числах. Эти целые числа представляют состояние допустимого. Вы можете передать любой интересующий вас. После того, как ints передаст в соответствие "item" из списка состояний, выберете вытягиваемые ничьи в этом состоянии.

Это имеет смысл в коде:

int[] state = new int[] {android.R.attr.state_window_focused, android.R.attr.state_focused};
minThumb.setState(state);

Обратите внимание, что мой список состояний доступен как state_pressed="true", так и android:state_window_focused="true". Поэтому я должен передать оба этих значения int в setState. Когда я хочу его очистить, я просто minThumb.setState(new int[]{});

Ответ 2

У вас недостаточно очков для комментариев, так что это просто дополнение к тому, что сказал разработчик Android. Для определенных состояний, таких как state_enabled, нет очевидного способа установить противоположное значение этого состояния (например, нет state_disabled). Чтобы указать отрицательное или противоположное состояние, просто передайте отрицательное значение ресурса для этого состояния.

int[] state = new int[] {-android.R.attr.state_enabled}; //Essentially state_disabled

Затем передайте этот целочисленный массив в метод setState(), как обычно.

minThumb.setState(state);