Android搜索栏如何在短时间内阻止拖动/禁用它

时间:2012-01-15 18:13:46

标签: android user-interface seekbar

如果值为true,我想阻止拖动搜索栏。这甚至可能吗?我使用搜索栏作为开关。如果我的搜索栏值为0,则按下按钮操作A开始。如果我的搜索栏值为1并且按下按钮,则启动操作B.
我想防止如果操作A或B正在运行,则搜索栏被拖动到另一个位置。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:61)

您应该设置自己的onTouchListener并返回true。

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

答案 1 :(得分:6)

您是否尝试过禁用该视图?

价: http://developer.android.com/reference/android/view/View.html#setEnabled(boolean)

<强>更新

https://stackoverflow.com/a/3278616/529691

理想情况下你不应该这样做,因为这会让用户感到困惑。我的建议是重新思考你的方法。

答案 2 :(得分:1)

设置一个班级变量

private boolean blockSeekBar = false;

根据您的要求设置blockSeekBar变量并在app。

中使用
seekBar.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return blockSeekbar;
        }
    });

setEnabled(true/false)也可以选择,但是视图效果不佳,这就是为什么上面的代码完全正常工作。

答案 3 :(得分:0)

int lastProgress=0;
  1. 在触发Seekbar.OnSeekbarChangeListener时跟踪上一个进度。

    private SeekBar.OnSeekBarChangeListener mOnSeekbarChangeListener = new 
    
    SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
        if (fromUser) {
            if (true) {
                seekbar.setProgress(lastProgress);
            } else {
                seekbar.setProgress(progress);
            }
        }
    }
    
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        lastProgress = seekBar.getProgress();
    }
    
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    
    }
    };