¿Alguien sabe cómo definir un SeekBar del valor mínimo? Es este hecho en el XML de diseño o tengo que definir a través de programación?

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

InformationsquelleAutor Sachin | 2010-06-13

14 Comentarios

  1. 115

    Hola, ¿alguien sabe cómo definir un
    SeekBar del valor mínimo?

    No se puede definir el valor mínimo. Es 0.

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

    Cuando se obtiene el valor, agregar 0.2 a ella.

    • Usted debe llamar a setProgress demasiado, así que el cambio se refleja en la interfaz de usuario, como Szabolcs Becze demuestra en su respuesta.
    • No, usted no debe. 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, se añade la mínima deseada para el progreso real. Dado que el progreso real ya «se refleja en la interfaz de usuario», no hay nada a cambio.
    • OK, así que depende de cómo las etiquetas se establezcan. He proporcionado una respuesta completa que creo que es la única manera correcta de hacerlo. stackoverflow.com/questions/3033135/…
    • Establecer el MIN etiqueta con un mínimo de valor y establecer el máximo de etiqueta con el valor máx. En onProgressChanged(), Establezca el valor actual de la Etiqueta, ya que el progreso+minValue.
  2. 21

    Aquí es lo que yo uso para obtener android:max para un max/min rango de una SeekBar.

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

    Así obtendrá el rango de minimum to minimum+max;

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

    • Sí creo que este es el mejor enfoque. Un SeekBar unidades son sólo valores abstractos. Usted puede simplemente ajustar en el código para obtener las unidades reales que quieras, así que he upvoted su respuesta.
    • Gracias Asthme. Debe ser aceptado respuesta!!!
  3. 9

    Min el valor debe ser 0 para el SeekBar de objetos en Java (es decir, no se puede cambiar), pero esto es cómo conseguir la necesaria apariencia y rendimiento.

    Supongamos que usted quiere que su min 5 y su máximo será de 100…

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

    Si su seekbar tiene una interfaz de usuario etiquetas, usted haría 5 (min) y 100 (max).

    Así, 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 usted puede introducir el 5 corrección, como este…

    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 seekbar la correcta min, max y la escala en la interfaz de usuario, y la posición del control no ‘salto’ a la derecha, si el usuario se desliza todo el camino a la izquierda.

    • Bonita explicación..
  4. 9

    Básicamente he añadido el tamaño de+10, en el que se establecerá automáticamente el min a 10 usted puede cambiar la suya, para establecer que 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();
    
    }
    • Básicamente he añadido el tamaño de+10, en el que se establecerá automáticamente el min a 10 usted puede cambiar la suya, para establecer que min. valor .
    • Por favor, no use los comentarios para explicar el código en tu respuesta, por favor incluya como parte de la respuesta en sí.
    • No hay setMin. Me gustaría poner el mínimo a -2…
  5. 5

    Mi solución que funciona muy 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
        }
    
    } 
  6. 3

    No se puede establecer el progreso en el flotador porque seekbar.getProgress() siempre devuelve un valor entero. Código siguiente se establece textview valor de 0.2 si seekbar valor es 0. usted puede cambiar minimumVal según su requisito.

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

    Usted puede tratar de 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) {
    
            }
        };
  8. 0

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

    Finalmente encontré una manera para establecer seekBar valor mínimo, solo set su setOnSeekBarChangeListener como este:

    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 esta ayuda 🙂

  10. 0

    Como dicen Fernão Magalhães :

    ahora puede agregar min atributo xml para SeekBar con :

    android:min="0.2"

    Pero es mejor para la API < 26 de utilizar compat atributo 😉 :

    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:min="0.2"
    • no existe ningún atributo «de la aplicación:min». Compilar dice que no ^^
    • muy tarde se añadió así que con un mínimo de 26 de api es inútil
    • Unexpected namespace prefix "app" found for tag SeekBar
    • Con xmlns:app="http://schemas.android.com/tools" en el encabezado de la vista xml, por supuesto
    • No sé por qué alguien va a -1 esta respuesta. Este es el más fiel.
    • Esto no funciona para mí con un mínimo de api 19

  11. 0

    Aquí es cómo 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()
        }
  12. 0

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

    Acaba de llamar que en onCreatePreferences() de su PreferenceFragmentCompat.

    Valores XML todavía va a ser ignorados en la API < 26 pero la configuración mediante programación, funciona.

Dejar respuesta

Please enter your comment!
Please enter your name here