¿Cómo definir el valor mínimo de un SeekBar? ¿Esto se hace en el diseño XML o necesito definirlo programáticamente?
Básicamente necesito cambiar mi valor mínimo de 0 a 0,2
java
android
android-view
seekbar
Sachin
fuente
fuente
setProgress
para que el cambio se refleje en la interfaz de usuario, como lo demuestra Szabolcs Becze en su respuesta.SeekBar
representa el rango de 0 a (máximo-mínimo). Para obtener el valor ajustado, agregue el mínimo deseado al progreso real. Dado que el progreso real ya está "reflejado en la interfaz de usuario", no hay nada que cambiar allí.Esto es lo que utilizo para obtener
android:max
un rango máximo / mínimo para aSeekBar
.mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progressChanged = minimumValue; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = minimumValue+ progress; } });
Entonces obtendrás el rango
minimum to minimum+max
;Para establecer el valor máximo en xml, use
max=(desiredMax-min)
;fuente
El valor mínimo debe ser 0 para el objeto SeekBar en Java (es decir, no se puede cambiar), pero así es como se obtiene el aspecto y el rendimiento necesarios.
Suponga que quiere que su mínimo sea 5 y su máximo sea 100 ...
Por lo tanto, tiene un rango de 95, por lo que necesitaría configurar SeekBar con un valor máximo de
95
.Si su barra de búsqueda tiene etiquetas de interfaz de usuario, las haría
5
(mín.) Y100
(máx.).Entonces, el XML de diseño sería algo así como ...
<LinearLayout android:id="@+id/sampleSizeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/batchDurationSecsLayout" android:orientation="vertical" android:visibility="visible" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/sample_size" /> <SeekBar android:id="@+id/sampleSizeSeekBar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="95" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:visibility="visible" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:gravity="left" android:text="5" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:gravity="right" android:text="100" /> </RelativeLayout> </LinearLayout>
Así que ahora puedes introducir la
5
corrección, así ...final SeekBar sampleSizeSeekBar = (SeekBar)findViewById(R.id.sampleSizeSeekBar); final int sampleSizeSeekBarCorrection = 5; //e.g., 95 <--> 100 int realValueFromPersistentStorage = appObj.getSampleSize(); //Get initial value from persistent storage, e.g., 100 sampleSizeSeekBar.setProgress(realValueFromPersistentStorage - sampleSizeSeekBarCorrection); //E.g., 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; //e.g., 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, e.g., 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); } } });
Esta solución le dará a su barra de búsqueda el mínimo, el máximo y la escala correctos en la interfaz de usuario, y la posición del control no 'saltará' hacia la derecha si el usuario lo desliza completamente hacia la izquierda.
fuente
Básicamente, agregué el tamaño + 10, que establecerá automáticamente el mínimo en 10, puede cambiar el suyo para establecer qué min. valor.
@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(); }
fuente
En las versiones de api> = 26 ahora puede agregar el
min
atributo xml a SeekBar:android:min="0.2"
fuente
Mi solución que funciona bien para mí es:
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress <= SOME_LIMIT) { seekBar.setProgress(SOME_LIMIT); } else { // DO SOMETHING } }
fuente
No puede establecer el progreso en flotante porque seekbar.getProgress () siempre devuelve un valor entero. El siguiente código establecerá el valor de vista de texto en 0.2 si el valor de la barra de búsqueda es 0. Puede cambiar el valor mínimo de acuerdo con sus requisitos.
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) { } });
fuente
Creé esta biblioteca simple, no es mucho, pero puede ahorrarle algo de tiempo.
https://github.com/joaocsousa/DoubleSeekBar
fuente
Puedes intentar hacerlo de esta manera:
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) { } };
fuente
este código me funciona bien !!!
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) { } };
fuente
Finalmente encontré una manera de establecer
seekBar
el valor mínimo , solo configúrelosetOnSeekBarChangeListener
así: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); } });
Espero que esto ayude :)
fuente
Así es como hice esto con 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() }
fuente
Si lo está utilizando
com.android.support:preference-v7
,SeekBarPreference
ya tiene un métodosetMin(int)
.Solo llámalo en
onCreatePreferences()
tuPreferenceFragmentCompat
.Los valores XML todavía se ignorarán en API <26, pero configurarlo programáticamente, funciona.
fuente