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"
Creé esta biblioteca simple, no es mucho, pero puede ahorrar algo de tiempo.
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) {
}
});