Android SeekBar最小值

有谁知道如何定义一个SeekBar的最小值? 这是在XML布局完成还是我需要以编程方式定义它?

基本上我需要将我的最小值从0改为0.2

嗨,有谁知道如何定义一个SeekBar的最小值?

您无法定义最小值。 它是0

基本上我需要将我的最小值从0改为0.2

当你得到的值,加上0.2

这里是我用来获取android:maxSeekBar的最大/最小范围。

 mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progressChanged = minimumValue; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = minimumValue+ progress; } }); 

所以你会得到范围minimum to minimum+max ;

要在xml中设置最大值,请使用max=(desiredMax-min) ;

基本上我已经添加了大小+ 10,它会自动将分钟设置为10,你可以改变你的设置它分钟。 值。

 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int siz = size + 10; txtViewFontSize.setTextSize(siz); Toast.makeText(this, String.valueOf(siz), Toast.LENGTH_SHORT).show(); } 

SeekBar对象在Java中的最小值必须是0(即不能被改变),但是这是如何获得所需的外观和性能。

假设你希望你的分数是5,你的最大值是100

因此,你有一个95的范围,所以你需要设置最大值为95的SeekBar。

如果你的搜索栏有UI标签,你可以使他们5 (分钟)和100 (最大)。

所以,布局XML将是像…

         

所以现在你可以介绍一下这5更正

 final SeekBar sampleSizeSeekBar = (SeekBar)findViewById(R.id.sampleSizeSeekBar); final int sampleSizeSeekBarCorrection = 5; //eg, 95 <--> 100 int realValueFromPersistentStorage = appObj.getSampleSize(); //Get initial value from persistent storage, eg, 100 sampleSizeSeekBar.setProgress(realValueFromPersistentStorage - sampleSizeSeekBarCorrection); //Eg, to convert real value of 100 to SeekBar value of 95. sampleSizeSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { int val = sampleSizeSeekBar.getProgress(); public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { val = progress + sampleSizeSeekBarCorrection; //eg, to convert SeekBar value of 95 to real value of 100 } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { try { appObj.saveSampleSize(val); //Save real value to persistent storage, eg, 100 appObj.makeToast("Sample size set to " + val); } catch(Exception e) { Log.e(LOG_TAG, "Error saving sample size", e); appObj.makeToast("Error saving sample size: " + e); } } }); 

这个解决方案将会为您的搜索栏在用户界面上提供正确的最小值,最大值和缩放比例,如果用户一直向左滑动,则控件的位置不会“跳”到右边。

我的解决方案适用于我的是:

  @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress <= SOME_LIMIT) { seekBar.setProgress(SOME_LIMIT); } else { // DO SOMETHING } } 

我创建了这个简单的库,它不是很多,但它可以节省一些时间。

https://github.com/joaocsousa/DoubleSeekBar

您无法设置浮动进度,因为seekbar.getProgress()总是返回整数值。 以下代码将设置textview值为0.2,如果seekbar值为0.您可以根据您的要求更改minimumVal。

 int minimumVal = 0; seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress >= minimumVal) { seekBar.setProgress(progress); textView.setText(progress); } else { seekBar.setProgress(minimumVal); textView.setText("0.2"); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); 

你可以尝试这样做:

int yourMinProgress = 10;

 private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { if (progress < yourMinProgress) { seekBar.setProgress(10); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; 

api版本> = 26中,现在可以将min xml属性添加到SeekBar中:

android:min="0.2"

这段代码适合我!

 SeekBar seekBar = (SeekBar)findViewById(R.id.seekBar); seekBar.setMax(100); seekBar.setProgress(40); seekBar.setOnSeekBarChangeListener(seekBarChangeListener); SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { if(progress <= 40){ seekBar.setProgress(40); } if(progress >= 40) { pgr_status.setText(String.valueOf(progress)); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; 

我终于find了一种方法来设置seekBar 最小值 ,只需设置你的setOnSeekBarChangeListener像这样:

 int minimumValue = 10; // your minimum value seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // you can set progress value on TextView as usual txtProgress.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { if(seekBar.getProgress() < minimumValue) seekBar.setProgress(minimumValue); } }); 

希望这可以帮助 :)

就像JoãoMagalhães:

您现在可以添加min xml属性到SeekBar:

 android:min="0.2" 

但是,使用compat属性API <26更好;):

 xmlns:app="http://schemas.android.com/apk/res-auto" app:min="0.2" 

下面是我如何与Kotlin做到这一点:

 view.controlTextSize.setOnClickListener { textSizeControl.textSizeControlSlider.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { var progress = progress if (progress < 10){ progress = 10 seekBar?.progress = progress } view.content.textSize = progress.toFloat() prefs.edit().putFloat("ContentTextSize", progress.toFloat()).apply() } override fun onStartTrackingTouch(seekBar: SeekBar?) {} override fun onStopTrackingTouch(seekBar: SeekBar?) {} }) textSizeControl.show() }