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);