studio personalizado onprogresschanged discrete custom configurar java android android-view seekbar

java - personalizado - Valor mínimo de Android SeekBar



seekbar discrete android (14)

Hola, ¿alguien sabe cómo definir el valor mínimo de SeekBar?

No puedes definir el valor mínimo. Es 0 .

Básicamente, necesito cambiar mi valor mínimo de 0 a 0.2

Cuando obtenga el valor, agregue 0.2 a él.

¿Alguien sabe cómo definir el valor mínimo de 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


Aquí está lo que uso para obtener android:max para un rango máximo / mínimo para una SeekBar .

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

Por lo tanto, obtendrá el rango minimum to minimum+max ;

Para establecer el valor máximo en xml, use max=(desiredMax-min) ;


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() }


Básicamente he agregado el tamaño + 10, que establecerá automáticamente el mínimo en 10, puede cambiar el suyo para configurarlo, que mínimo. 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(); }


Como dice João Magalhães:

ahora puede agregar el atributo min xml a SeekBar con:

android:min="0.2"

Pero es mejor para API <26 usar el atributo compat;):

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



El valor mínimo debe ser 0 para el objeto SeekBar en Java (es decir, no se puede cambiar), pero esta es la forma de obtener el aspecto y el rendimiento requeridos.

Supongamos que quiere que su min sea 5 y su max sea 100 ...

Por lo tanto, tiene un rango de 95, por lo que tendría que configurar SeekBar con un valor máximo de 95 .

Si su barra de búsqueda tiene etiquetas UI, las haría 5 (mínimo) y 100 (máximo).

Entonces, el diseño XML 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>

Entonces 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, máximo y escala correctos en la IU, y la posición del control no ''saltará'' hacia la derecha si el usuario la desliza completamente hacia la izquierda.


En las versiones de api> = 26 ahora puede agregar el atributo min xml a SeekBar:

android:min="0.2"


Finalmente encontré una forma de establecer el valor mínimo de seekBar , solo establezca setOnSeekBarChangeListener esta manera:

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 :)


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 } }


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) { } };


Si está utilizando com.android.support:preference-v7 , SeekBarPreference ya tiene un método setMin(int) .

Simplemente llame a onCreatePreferences() de su PreferenceFragmentCompat .

Los valores XML aún se ignorarán en la API <26 pero establecerlo de forma programática funciona.


este código funciona bien para mí !!!

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) { } };


No puede establecer el progreso en float porque seekbar.getProgress () siempre devuelve un valor entero. El siguiente código configurará el valor de la vista de texto en 0.2 si el valor de la barra de búsqueda es 0. puede cambiar el valor de MinimumVal de acuerdo con sus requerimientos.

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) { } });