如何限制SeekBar的范围

37

我想要将 SeekBar 的最大值和最小值分别设置为50和20。

SeekBar 直接提供了设置最大值的选项,但是如何将其最小值设置为20而不是0?

6个回答

82

在 SeekBar 中,你只能设置最大值。

<SeekBar android:id="@+id/SeekBar01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="50"/>

而且,你不能直接将最小值设置为 SeekBar。

 SeekBar mSeekbar = (SeekBar) findViewById(R.id.SeekBar01);

    mSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
    {
       public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
       {
            length_edit.setText(Integer.toString(progress + 20));
       }

      public void onStartTrackingTouch(SeekBar seekBar) {}

      public void onStopTrackingTouch(SeekBar seekBar) {}
    });

当你看到最小的进展时,你可以将其与最小值相加,就像我想在你的情况下添加 20 一样。


@Paresh:设置SeekBar的最小值的逻辑很好。太棒了... - Shreyash Mahajan
兄弟,我们可以将文本设置到任何“视图”中。 - Muaz Usmani
你抄袭了Romain的答案吗? ;) - Muhammad Babar
@MuhammadBabar 希望您已经查看了我发布的答案!请给我那个答案的链接。 - Paresh Mayani
1
@PareshMayani 不要介意,我只是开玩笑。祝你安卓开发愉快 :) - Muhammad Babar
显示剩余2条评论

25

将最大值设置为30,并在从SeekBar读取的值上加20。


1
这是唯一一个不会影响所需最大值的答案。 - Flynny75
自API Level 26起,您可以使用setMin():https://developer.android.com/reference/android/widget/AbsSeekBar.html#setMin(int)。 - Jim

6
最简单的方法是在SeekBar.OnSeekBarChangeListener()中限制它,为你的SeekBar设置最小值或默认值字段。
首先,需要创建具有最小值或默认值的字段。然后在创建SeekBar时设置此值:
private int fillDefault;

FragmentonCreateView()ActivityonCreate()中:
fillDefault = 20;
fillSeekBar.setProgress(fillDefault);

其次,实现它的监听器:

fillSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            // Notification that the progress level has changed.
            if (progress < fillDefault){
                seekBar.setProgress(fillDefault); // magic solution, ha
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // Notification that the user has started a touch gesture.
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // Notification that the user has finished a touch gesture.
        }
    });

它能够运作。简单而神奇:D


1
当您将左侧填充设置为0dp并且希望避免拇指重叠在进度条末端时,此解决方案非常理想,例如:如果(progress == 0){ seekBar.setProgress(1); } - Pedro Hidalgo

0
例如;
 public static int LENGTH_MIN_VALUE = 20;
 public static int LENGTH_MAX_VALUE = 50;
 SeekBar seekBar = (SeekBar) findViewById(R.id.passwordSeekBar);
    seekBar.setMax(LENGTH_MAX_VALUE);
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(progress <= Constract.PASSWORD_LENGTH_MIN_VALUE){
                progress = Constract.PASSWORD_LENGTH_MIN_VALUE + progress;
            }

            String numberAsString = String.valueOf(progress);
            seekNumberView.setText(numberAsString);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {}

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {}
    });

0

-3
你可以尝试这个:
seekBar.setMax(max_value-min_value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接