2010-08-16 15 views
31

Me gustaría establecer los límites máximo y mínimo de SeekBar a 50 y 20 respectivamente.cómo limitar la barra de búsqueda

SeekBar tiene una opción directa arriba proporcionar el valor máximo, pero ¿cómo establecer su valor mínimo en 20 en lugar de 0?

Respuesta

73

En SeekBar que can set only max value.

<SeekBar android:id="@+id/SeekBar01" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:max="50"/> 

Y, No es posible ajustar directamente el valor mínimo de la barra de búsqueda.

SeekBar mSeekbar = (SeekBar) findViewById(R.id.SeekBar01); 

    mSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
    { 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) 
     { 
      length_edit.setText(Integer.toString(progress + 20)); 
     } 

     public void onStartTrackingTouch(SeekBar seekBar) {} 

     public void onStopTrackingTouch(SeekBar seekBar) {} 
    }); 

Como se puede ver el progreso min se puede resumir con un mínimo que quisiera - en su caso 20.

+0

Bien, gracias por el código, está funcionando, excepto por el hecho de que la vista de texto que estoy usando para establecer el valor de progrees no se muestra y la aplicación se cuelga – iscavengers

+0

lo siento amigo, waz de permiso, dats y no respondió ... votó y aceptó respuesta ... disfrutar – iscavengers

+0

@Paresh: Buena lógica para establecer el valor mínimo para la barra de búsqueda. Estupendo. . . –

22

Establezca el valor máximo en 30 y agregue 20 a los valores que lee en SeekBar.

+1

Esta es la única respuesta que no tiene un efecto en el máximo deseado – Flynny75

4

La forma más sencilla de hacer esto es simplemente limitarlo en el SeekBar.OnSeekBarChangeListener() para su SeekBar.

En primer lugar, debe crear el campo con valor mínimo o predeterminado. A continuación, establezca este valor al crear SeekBar:

private int fillDefault; 

En onCreateView() de un Fragment o onCreate de un Activity:

fillDefault = 20; 
fillSeekBar.setProgress(fillDefault); 

En segundo lugar, aplicar el oyente para ello:

fillSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      // Notification that the progress level has changed. 
      if (progress < fillDefault){ 
       seekBar.setProgress(fillDefault); // magic solution, ha 
      } 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // Notification that the user has started a touch gesture. 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // Notification that the user has finished a touch gesture. 
     } 
    }); 

funciona . Sencilla y sorprendente: D

+1

Esta solución es ideal cuando establece el relleno a 0dp y desea evitar que el pulgar se solape con el extremo de la barra de búsqueda, es decir, si (progreso == 0) { seekBar.setProgress (1); } – PedroHidalgo

-3

Puede probar esto:

seekBar.setMax(max_value-min_value); 
0

Por ejemplo;

public static int LENGTH_MIN_VALUE = 20; 
public static int LENGTH_MAX_VALUE = 50; 
SeekBar seekBar = (SeekBar) findViewById(R.id.passwordSeekBar); 
    seekBar.setMax(LENGTH_MAX_VALUE); 
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if(progress <= Constract.PASSWORD_LENGTH_MIN_VALUE){ 
       progress = Constract.PASSWORD_LENGTH_MIN_VALUE + progress; 
      } 

      String numberAsString = String.valueOf(progress); 
      seekNumberView.setText(numberAsString); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) {} 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) {} 
    }); 
Cuestiones relacionadas