7

在特殊情况下,我需要防止用户输入搜索栏。如果我使用setEnabled(false)它会变成灰色而不是白色。

是否有任何方法可以禁用 seekbar 而不会变暗或在禁用的 seekbar 中设置另一个可绘制的进度?

4

5 回答 5

5

是的。有可能的!但是你需要重写 SeekBar 的 drawableStateChanged 函数,如下所示:

@Override
protected void drawableStateChanged() {
    super.drawableStateChanged();
    final Drawable progressDrawable = getProgressDrawable();
    if(isEnabled() == false && progressDrawable != null) progressDrawable.setAlpha(255);
}

实际上,当我在 AbsSeekBar 中看到硬编码的 alpha 值时,我很生气:

mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.Theme_disabledAlpha, 0.5f);

因为没有函数会关闭,甚至改变 SeekBar 的禁用 alpha 值。看看 drawableStateChanged 函数中的那些代码行:

if (progressDrawable != null) {
    progressDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha));
}
于 2015-12-07T23:22:44.403 回答
3

我不确定您为什么要更改此设置,而且我不认为为禁用某些功能的用户覆盖视觉队列是一种好习惯。如果它看起来很活跃,但没有交互,我会为你的应用生气。

无论如何,要回答您的问题,您应该查看StateListDrawable这个问题专门针对搜索栏概述了它。

于 2013-01-23T14:30:58.790 回答
2

更好的解决方案在这里......

seekBar.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
于 2016-04-13T08:06:36.810 回答
2

您可以使用setEnabled(false)并将Theme_disabledAlpha属性设置为上面提到的@Ilya Pikin,如下所示:

<item name="android:disabledAlpha">1.0</item>
于 2018-06-04T12:18:38.053 回答
1

Android 在禁用状态下将颜色的 alpha 值从 255 更改为 127。只要确保在禁用搜索栏后将其设置回 255。

seekBar.post(new Runnable(){
    @Override
    public void run()
    {
        seekBar.getProgressDrawable().setAlpha(255);
    }
});

view.post 仅在您不确定是否已呈现 seekbar 时才需要,否则只需

seekBar.getProgressDrawable().setAlpha(255);

足够。

于 2017-02-19T10:56:03.923 回答