¿Alguien sabe cómo definir el valor mínimo de SeekBar? ¿Esto se hace en el diseño XML o necesito definirlo programáticamente?Android SeekBar Valor mínimo
Básicamente necesito cambiar mi valor mínima desde 0 a 0,2
¿Alguien sabe cómo definir el valor mínimo de SeekBar? ¿Esto se hace en el diseño XML o necesito definirlo programáticamente?Android SeekBar Valor mínimo
Básicamente necesito cambiar mi valor mínima desde 0 a 0,2
Hola, ¿alguien sabe cómo definir un valor mínimo de SeekBar?
No se puede definir el valor mínimo. Es 0
.
Básicamente tengo que cambiar mi valor mínimo a partir 0 a 0,2
Cuando se obtiene el valor, añadir 0.2
a ella.
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ín. 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();
}
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ín. valor. – SALMAN
No utilice comentarios para explicar el código en su respuesta, inclúyalo como parte de la respuesta. – Flexo
No hay setMin. Me gustaría establecer el mínimo en -2 ... – powder366
Creé esta biblioteca simple, no es mucho, pero puede ahorrarle algo de tiempo.
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
}
}
Esto es lo que utilizo para obtener android:max
para un rango máximo/min para una SeekBar
.
mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = minimumValue;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progressChanged = minimumValue+ progress;
}
});
Así obtendrá la gama minimum to minimum+max
;
Para establecer el valor máximo en xml, use max=(desiredMax-min)
;
Sí, creo que este es el mejor enfoque. Las unidades de SeekBar son solo valores abstractos. Simplemente puede ajustarlos en el código para obtener las unidades reales que desea, por lo que he votado por encima de su respuesta. –
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 necesarios.
Supongamos que usted quiere que su min a ser 5 y el máximo para ser 100 ...
Por lo tanto, usted tiene una gama de 95, por lo que habría que 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) y 100
(máx).
Por lo tanto, el diseño de 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>
Así ahora se puede introducir la corrección 5
, 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 dará 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.
Buena explicación .. –
No puede establecer el progreso en float porque seekbar.getProgress() siempre devuelve el 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) {
}
});
Usted puede intentar hacer 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) {
}
};
este código funciona para mí 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) {
}
};
En versiones api> = 26 ahora puede agregar min
atributo xml para SeekBar:
android:min="0.2"
Finalmente encontré una manera de establecer seekBar
valor mínimo, juego acaba de establecer su setOnSeekBarChangeListener
de la siguiente 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 :)
Como dicen Juan Magalhaes:
ahora puede agregar atributo min xml para SeekBar con:
android:min="0.2"
Pero es mejor para la API < 26 al utilizar el atributo compat;):
xmlns:app="http://schemas.android.com/apk/res-auto"
app:min="0.2"
no existe tal atributo "aplicación: min". Compile dice que no ^^ – GuilhE
Aquí es cómo lo 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()
}
Debe llamar a 'setProgress' también para que el cambio se refleje en la interfaz de usuario, como lo demuestra Szabolcs Becze en su respuesta. –
@ user1617737: No, no deberías. Su respuesta no tiene nada que ver con el valor mínimo. El 'SeekBar' representa el rango de 0 a (max-min). Para obtener el valor ajustado, agrega el mínimo deseado al progreso real. Como el progreso real ya está "reflejado en la IU", no hay nada que cambiar allí. – CommonsWare
Bien, eso depende de cómo estén configuradas sus etiquetas. Acabo de proporcionar una respuesta completa, que creo que es la única forma correcta de hacerlo. http://stackoverflow.com/questions/3033135/android-seekbar-minimum-value/25239248#25239248 –