【问题标题】:Set Min Value for Android Seek bar为 Android 搜索栏设置最小值
【发布时间】:2021-08-09 18:30:47
【问题描述】:
private static int INCREMENT_BY = 10;
private static int MAX = 1000;
private static int MIN = 0;
SeekBar seekbar_min, seekbar_max;
private int max = 0, min = 0;


 seekbar_min.setProgress(MIN);
    seekbar_min.incrementProgressBy(INCREMENT_BY);
    seekbar_min.setMax(MAX);
    seekbar_min.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            progress = progress / INCREMENT_BY;
            progress = progress * INCREMENT_BY;
            if (progress < 100) {
                min = progress * 10;
            } else if (progress < 300) {
                min = progress * 50;
            } else if (progress < 900) {
                min = progress * 100;
            } else {
                min = progress * MAX;
            }
            tv_price_min.setText(String.valueOf(min));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (seekBar.getProgress() != MIN || seekBar.getProgress() != MAX){
                if (seekBar.getProgress() < 100) {
                    max = seekBar.getProgress() + 10;
                } else if (seekBar.getProgress() < 300) {
                    max = seekBar.getProgress() + 50;
                } else if (seekBar.getProgress() < 900) {
                    max = seekBar.getProgress() + 100;
                } else {
                    max = seekBar.getProgress() + MAX;
                }
                seekbar_max.setProgress(max);
            }
        }
    });


    seekbar_max.incrementProgressBy(INCREMENT_BY);
    seekbar_max.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            progress = progress / INCREMENT_BY;
            progress = progress * INCREMENT_BY;
            if (progress < 100) {
                max = progress * 10;
            } else if (progress < 300) {
                max = progress * 50;
            } else if (progress < 900) {
                max = progress * 100;
            } else {
                max = progress * MAX;
            }
            tv_price_max.setText(String.valueOf(max));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

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

Seek bar 的最高价格必须具有最小值,即 Minimum Seek bar 当前值。我可以成功地做到这一点,但问题是,最大搜索栏允许将最小值更改为 0,这是我不想要的。

【问题讨论】:

  • 你不能设置最小值,你可以定义最大值。
  • 解决方案是将 0 转换为你的最小值 in progressChanged
  • 不,我可以选择使用 setProgress() 方法设置最小值。但如果用户不更改最大搜索栏值,它会起作用,当用户更改最大搜索栏值时,它会改变。
  • 在 onProgressChange 检查它是否低于您的最小值,将其设置为最小值

标签: android


【解决方案1】:

Seekbar 没有setMin 功能。默认最小值为零。如果您想为Seekbar 设置一个最小值,那么您有两个选择:

  • 通过一些计算将零值转换为最小值。
  • ProgressChange 回调中不允许值超出最小值,并使用以下 sn-p:
if (seekbar.getProgress() < MIN_VALUE) {
    seekbar.setProgress(MIN_VALUE);
}

【讨论】:

    【解决方案2】:

    试试这个,我能够在我的一个项目中做到这一点。在这种情况下,最大值为 23,最小值为 8。

            seekBarLength = findViewById(R.id.seekBarLength);
            seekBarLength.setMax(23-8);
            seekBarLength.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    progress += 8;
                    textViewPasswordLength.setText(progress + "");
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
    
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
    
                }
            });
    

    【讨论】:

      【解决方案3】:

      实际上您无法定义最小值。 但是有一个我总是使用的技巧:

      在“onProgressChanged”方法中,放置这段代码

      int min = 1;                                  //The Min Value You Want To
      int progressValue;
      
      if( i < min ) {                               // i : Progress Value
         progressValue = min;
         seekBar.setProgress(min);
                      }else progressValue = i;
      

      【讨论】:

        【解决方案4】:

        我已经找到了一种最简单的方法(仅 API 26 和更高版本)。有一个setMin(int number) 方法。

        seekbar.setMax(6);
        seekbar.setMin(1);
        

        问题是,您必须将 build gradle 中的最低 API 设置为 25 或更高

        【讨论】:

        • 没有全面的解决方案,需要支持落后的android版本!
        猜你喜欢
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多