特別な場合に、シークバーがユーザー入力されないようにする必要があります。使用setEnabled(false)
すると白ではなく灰色になります。
調光せずにシークバーを無効にしたり、無効にしたシークバーの進行のために別のドローアブルを設定したりする方法はありますか?
はい。可能です!ただし、SeekBar の drawableStateChanged 関数を次のようにオーバーライドする必要があります。
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
final Drawable progressDrawable = getProgressDrawable();
if(isEnabled() == false && progressDrawable != null) progressDrawable.setAlpha(255);
}
実際、AbsSeekBar でハードコードされたアルファ値を見たとき、私は非常に怒っていました。
mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.Theme_disabledAlpha, 0.5f);
機能がないため、オフにするか、SeekBar の無効なアルファ値を変更することさえあります。drawableStateChanged 関数のコード行を見てください。
if (progressDrawable != null) {
progressDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha));
}
なぜこれを変更したいのかわかりません。また、何かが無効になっているユーザーのビジュアル キューをオーバーライドするのは良い習慣ではないと思います。アクティブに見えても反応しない場合は、あなたのアプリに腹が立ちます。
とにかく、あなたの質問に答えるには、StateListDrawableを見る必要があります。この質問は、特にシークバーについて概説しています。