Disabled seekBar without dimming

こ雲淡風輕ζ 提交于 2019-12-08 19:03:15

问题


I need to prevent seekbar from user inputs in special cases. If I use setEnabled(false) it becomes gray instead of white.

Is there any method to disable seekbar without dimming or set another drawable for progress in disabled seekbar ?


回答1:


I'm not sure why you'd want to change this, and I don't believe it's good practice to override the visual queue for a user that something is disabled. If it looks active, but doesn't interact, I'm going to be mad at your app.

Regardless, to answer your question, you should look at StateListDrawable this question outlines it specifically for seek bars.




回答2:


Yes. It is possible! But you need to override SeekBar's drawableStateChanged function, with something like this:

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

Actually I was very angry, when I saw hardcoded alpha value in AbsSeekBar:

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

Because there is no function, which will turn off, or even change disabled alpha value for SeekBar. Just take a look at those lines of code in drawableStateChanged function:

if (progressDrawable != null) {
    progressDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha));
}



回答3:


Better solution here....

seekBar.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });



回答4:


Android changes alpha value of color to 127 from 255 in disabled state. Just make sure you set it back to 255 after disabling seekbar.

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

view.post is required only if you are unsure that seekbar is rendered yet or not, otherwise just

seekBar.getProgressDrawable().setAlpha(255);

is enough.




回答5:


You can use setEnabled(false) and set the Theme_disabledAlpha attribute as @Ilya Pikin mentioned above like this:

<item name="android:disabledAlpha">1.0</item>


来源:https://stackoverflow.com/questions/14481832/disabled-seekbar-without-dimming

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!