17

我有一个像这样的drawable:

<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 状态。

4

2 回答 2

28

知道了。此处的评论有所帮助:Android:如何以编程方式更新选择器(StateListDrawable)

所以Drawable.setState()需要一个整数数组。这些整数表示可绘制对象的状态。你可以传递任何你想要的整数。一旦 int 传入匹配状态列表可绘制对象中的“项目”,可绘制对象就会在该状态下绘制。

它在代码中更有意义:

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[]{});

于 2012-08-13T23:52:10.093 回答
10

没有足够的评论点,所以这只是android-developer所说的补充。对于某些状态,例如 state_enabled,没有明显的方法可以设置该状态的相反值(例如,没有 state_disabled)。要指示负面或相反的状态,只需传递该状态的资源的负值。

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

然后像往常一样将该整数数组传递给 setState() 方法。

minThumb.setState(state);
于 2015-03-16T13:37:09.810 回答