如何设置搜索栏最小值和最大值

我有一个搜索栏,试图将值设置为60到180为1,而40到190为第二步为1。

sb1 = (SeekBar) findViewById(R.id.progresss); sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub //int inVal = Integer.parseInt(String.valueOf(seekBar.getProgress())); //inVal =+ 70; //Toast.makeText(getApplicationContext(), String.valueOf(inVal),Toast.LENGTH_LONG).show(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { // TODO Auto-generated method stub progress =+ 70; Toast.makeText(getApplicationContext(), String.valueOf(progress),Toast.LENGTH_LONG).show(); } }); 

不管用。 知道怎么解决吗?

Related of "如何设置搜索栏最小值和最大值"

 seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int MIN = 5; if (progress < MIN) { value.setText(" Time Interval (" + seektime + " sec)"); } else { seektime = progress; } value.setText(" Time Interval (" + seektime + " sec)"); } }); 

我知道答案已经被选中了,我在回复方面有点迟,但我想分享我的答案。

您不能设置SeekBar的min (始终为0),并且您不能设置SeekBar的step值(始终为1)。

如果要将步长为1的值设置为60180 ,则可以执行以下操作:

 int step = 1; int max = 180; int min = 60; // Ex : // If you want values from 3 to 5 with a step of 0.1 (3, 3.1, 3.2, ..., 5) // this means that you have 21 possible values in the seekbar. // So the range of the seek bar will be [0 ; (5-3)/0.1 = 20]. seekbar.setMax( (max - min) / step ); seekbar.setOnSeekBarChangeListener( new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) {} @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // Ex : // And finally when you want to retrieve the value in the range you // wanted in the first place -> [3-5] // // if progress = 13 -> value = 3 + (13 * 0.1) = 4.3 double value = min + (progress * step); } } ); 

我在代码中添加了另一个示例,以便您了解数学。

希望它有所帮助

您可以使用以下代码为搜索栏设置最大值:

  sb1.setMax(100); 

这将设置搜索栏的最大值。

但是你不能设置最小值但是你可以做一些算术来调整值。 使用算术来调整应用程序所需的值。

例如,假设您希望在SeekBar上显示从-50到100的数据值。 将SeekBar的最大值设置为150(100 – ( – 50)),然后将50添加到原始值以获取设置条位置时应使用的数字。

您可以通过此链接获取更多信息。

为我设置最小值和最大值到搜索条的最简单方法:如果你想要值min = 60到max = 180,这等于min = 0 max = 120。 所以在你的seekbar xml set属性中:

 android:max="120" 

min将始终为0

现在你只需要做你正在做的事情,添加金额以获得任何变化中的翻译价值,在这种情况下为+60。

  seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int translatedProgress = progress + 60; } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); 

注意seekbar属性android:progress,如果你改变了范围,你必须重新计算你的初始进度。 如果你想要50%,max / 2,在我的例子中120/2 = 60;

Seek Bar有设置最大值的方法但不是设置最小值这里我写了一个代码来设置最小搜索条值当我们添加这个代码然后你的搜索栏值不小于mim值试试这个对我来说工作正常

/ *此方法在搜索栏值更改后调用* /

  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { /* Check the current seekbar value is greather than min value*/ if (progress < MIN_VALUE) { /* if seek bar value is lesser than min value then set min value to seek bar */ seekBar.setProgress(MIN_VALUE); } } 

设置搜索栏最大值和最小值

 seekbar have method that setmax(int position) and setProgress(int position) 

谢谢

复制此类并使用自定义搜索栏:

 public class MinMaxSeekBar extends SeekBar implements SeekBar.OnSeekBarChangeListener { private OnMinMaxSeekBarChangeListener onMinMaxSeekBarChangeListener = null; private int intMaxValue = 100; private int intPrgress = 0; private int minPrgress = 0; public int getIntMaxValue() { return intMaxValue; } public void setIntMaxValue(int intMaxValue) { this.intMaxValue = intMaxValue; int middle = getMiddle(intMaxValue, minPrgress); super.setMax(middle); } public int getIntPrgress() { return intPrgress; } public void setIntPrgress(int intPrgress) { this.intPrgress = intPrgress; } public int getMinPrgress() { return minPrgress; } public void setMinPrgress(int minPrgress) { this.minPrgress = minPrgress; int middle = getMiddle(intMaxValue, minPrgress); super.setMax(middle); } private int getMiddle(int floatMaxValue, int minPrgress) { int v = floatMaxValue - minPrgress; return v; } public MinMaxSeekBar(Context context, AttributeSet attrs) { super(context, attrs); this.setOnSeekBarChangeListener(this); } public MinMaxSeekBar(Context context) { super(context); this.setOnSeekBarChangeListener(this); } @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { intPrgress = minPrgress + i; onMinMaxSeekBarChangeListener.onMinMaxSeekProgressChanged(seekBar, intPrgress, b); } @Override public void onStartTrackingTouch(SeekBar seekBar) { onMinMaxSeekBarChangeListener.onStartTrackingTouch(seekBar); } @Override public void onStopTrackingTouch(SeekBar seekBar) { onMinMaxSeekBarChangeListener.onStopTrackingTouch(seekBar); } public static interface OnMinMaxSeekBarChangeListener { public void onMinMaxSeekProgressChanged(SeekBar seekBar, int i, boolean b); public void onStartTrackingTouch(SeekBar seekBar); public void onStopTrackingTouch(SeekBar seekBar); } public void setOnIntegerSeekBarChangeListener(OnMinMaxSeekBarChangeListener floatListener) { this.onMinMaxSeekBarChangeListener = floatListener; } } 

此类public void setMin(int minPrgress)方法public void setMin(int minPrgress)用于设置Seek Bar的最小值此类public void setMax(int maxPrgress)方法public void setMax(int maxPrgress)用于设置Seek Bar的最大值

在这里看到我的答案

我只使用SeekBar的监听器,它工作正常。

最小值总是从零开始,你无能为力。 但是,当用户开始滚动它时,您可以更改其值。

在这里,我将最大值设置为64.这个计算很简单:我希望用户从15分钟到16个小时选择一个时间,并且他选择每15分钟到16个小时中的一个,清楚吗? 我知道,非常简单:)

  SeekBar seekBar = (SeekBar) dialog.findViewById(R.id.seekBar); seekBar.setMax(64); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { float b; @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float des = (float) progress / 4; b = des; hours.setText(des + " hours"); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { hoursSelected = b; } }); 
  private static final int MIN_METERS = 100; private static final int JUMP_BY = 50; metersText.setText(meters+""); metersBar.setProgress((meters-MIN_METERS)); metersBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { progress = progress + MIN_METERS; progress = progress / JUMP_BY; progress = progress * JUMP_BY; metersText.setText((progress)+""); } }); } 

没有选项可以在搜索栏中设置最小值或最大值,因此您可以在此处使用公式来缩放您的值。

 Desired_value = ( progress * ( Max_value - Min_value) / 100 ) + Min_value 

我在很多例子中测试了这个公式。 在您的示例中,如果progressBar是中间(即progress = 50)并且Min_val和Max_val分别是60和180,则此公式将为您提供Desired_value’120’。