17

私はこのようなドローアブルを持っています:

<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がパスインすると、状態リストのドローアブルの「アイテム」がその状態でドローアブルに描画されます。

コードではもっと意味があります:

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 に答える