У меня есть такая возможность:
<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.
Понял. Комментарий отсюда помог: 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"
как state_pressed="true"
и android:state_window_focused="true"
. Поэтому я должен передать оба эти значения int в setState
. Когда я хочу его очистить, я просто minThumb.setState(new int[]{});
Не хватает очков для комментариев, так что это просто дополнение к тому, что сказал разработчик Android. Для определенных состояний, таких как state_enabled, нет очевидного способа установить противоположное значение этого состояния (например, нет state_disabled). Чтобы указать отрицательное или противоположное состояние, просто передайте отрицательное значение ресурса для этого состояния.
int[] state = new int[] {-android.R.attr.state_enabled}; //Essentially state_disabled
Затем передайте этот целочисленный массив в метод setState (), как обычно.
minThumb.setState(state);