2010-04-10 14 views
22

Me gustaría crear una barra de búsqueda para una aplicación de Android que permita al usuario seleccionar un valor entre -5 y 5 (que se asigna a "totalmente en desacuerdo" y "totalmente de acuerdo"). ¿Cómo hago una barra de búsqueda con valores discretos? o hay un mejor widget de UI que podría usar para esto?barra de búsqueda discreta en la aplicación de Android?

Gracias.

Respuesta

7

No sé cuál es el problema aquí, agrega una barra de búsqueda que tiene un rango de 0-10. Luego puede asignar estos valores a -5 si resta -5 del valor seleccionado.

EDITAR

añadir android:max="10" a la definiton xml y se obtiene una barra de búsqueda de tamaño fijo.

Quizás deba considerar agregar una vista de texto para indicar la representación textual del valor seleccionado actual, como: Totalmente en desacuerdo. Para actualizar esta vista, suscríbase al evento onProgressChanged y el parámetro progress le dará el número elegido.

SeekBar s = (SeekBar) findViewById(R.id.SeekBar); 
s.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

        @Override 
        public void onProgressChanged(SeekBar seekBar, 
          int progress, boolean fromUser) { 
            } 
} 
+0

pensé seekbars siempre se ven y actúan continua? Esperaba una forma de mostrar las marcas de los valores, y la interacción con la barra para sentirse discreto. – vee

+0

'SeekBar' devuelve un valor entero, por lo que será discreto numéricamente, al menos. – CommonsWare

17

El Seekbar funciona muy bien para valores discretos. Usamos una Seekbar para datos discretos como se muestra a continuación. Para mostrar qué elemento está seleccionado, simplemente cambiamos la fuente de la vista de texto seleccionada para que sea más grande. También puede resaltar cambiando el color de fondo o algo. Funciona bastante bien Deberá llamar a setMax (11) en la barra de búsqueda, y luego en su código deberá traducir entre el rango (0 a 11) y (-5 a 5) apropiadamente.

<LinearLayout 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal"> 
    <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal"> 
    <TextView android:text="-5" 
      android:id="@+id/answerNegative5" 
      android:textSize="25sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    <TextView android:text="-4" 
      android:id="@+id/answerNegative4" 
      android:textSize="25sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    <TextView android:text="-3" 
      android:id="@+id/answerNegative3" 
      android:textSize="25sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    ..... 
    </LinearLayout> 

    <SeekBar android:id="@+id/intensitySlider" 
        android:layout_weight="0" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" /> 
</LinearLayout> 
+0

esto es tan cierto, barra de búsqueda con estilos personalizados funcionó muy bien para mí. – Ajibola

0

Espero que este código seguramente te ayude. Prueba esto ...

float discrete = 0; 
float start = 0; 
float end = 100; 
float start_pos = 0; 
int start_position = 0; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    start = -10; //you need to give starting value of SeekBar 
    end = 10; //you need to give end value of SeekBar 
    start_pos = 5; //you need to give starting position value of SeekBar 

    start_position = (int)(((start_pos - start)/(end - start)) * 100); 
    discrete = start_pos; 
    SeekBar seek = (SeekBar) findViewById(R.id.seekBar1); 
    seek.setProgress(start_position); 
    seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 


     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getBaseContext(), "discrete = " + String.valueOf(discrete), Toast.LENGTH_SHORT).show(); 
     } 


     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 


     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      // TODO Auto-generated method stub 
      // To convert it as discrete value 
      float temp = progress; 
      float dis = end - start; 
      discrete = (start + ((temp/100) * dis)); 

     } 
    }); 
} 
+4

¡Bienvenido a Stack Overflow! Tenga cuidado cuando publique copiar y pegar respuestas al pie de página o verbatim a preguntas múltiples, estas tienden a ser señaladas como "basura" por la comunidad. Si está haciendo esto, generalmente significa que las preguntas son duplicadas, por lo tanto, márquelas como tales. – Kev

0

1-er paso: establecer Maxval a 10;

2-nd paso:

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
     boolean fromUser) 
    { 
    switch(seekBar.getId()) 
    { 
    case R.id.mySeekBar: 
     int prValue = progress - 5; 
     editText.setText(String.valueOf(preValue)); 
     break; 
    } 
} 
8

Check this link Si desea implementar seekbar discreta con número de huecos sin necesidad de utilizar biblioteca de terceros a continuación, utilizar las propiedades de estilo de la barra de búsqueda.

<SeekBar 
    android:id="@+id/sb" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:max="10" 
    android:thumb="@drawable/ic_location" 
    android:theme="@style/Widget.AppCompat.SeekBar.Discrete" /> 

enter image description here

+0

¿Cómo poner el icono encima del control deslizante? – PeerNet

Cuestiones relacionadas