как ограничить seekbar - PullRequest
       11

как ограничить seekbar

34 голосов
/ 16 августа 2010

Я бы хотел установить максимальные и минимальные пределы SeekBar до 50 и 20. соответственно.

SeekBar имеет прямую опцию top, обеспечивающую максимальное значение, нокак установить минимальное значение 20 вместо 0?

Ответы [ 6 ]

77 голосов
/ 16 августа 2010

В SeekBar вы can set only max value.

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

И, Вы не можете напрямую установить минимальное значение для панели поиска.

 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.

24 голосов
/ 16 августа 2010

Установите максимальное значение 30 и добавьте 20 к значениям, которые вы читаете из SeekBar.

6 голосов
/ 13 августа 2015

Самый простой способ сделать это - просто ограничить его в SeekBar.OnSeekBarChangeListener() для вашего SeekBar.

Сначала вам нужно создать поле с минимальным значением или значением по умолчанию.Затем установите это значение при создании SeekBar:

private int fillDefault;

В onCreateView() из Fragment или onCreate из Activity:

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

0 голосов
/ 04 июля 2017

Я ответил на этот вопрос здесь: Как установить минимальную и максимальную величину поисковой панели .

С помощью простой математики вы можете установить минимальное значение, максимальное значение и даже шаг вашей панели поиска.

Надеюсь, это поможет!

0 голосов
/ 18 января 2016

Например;

 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 голосов
/ 02 октября 2015

Вы можете попробовать это:

seekBar.setMax(max_value-min_value);
...