2010-04-10 20 views
22

Vorrei creare una barra di ricerca per un'app per Android che consenta all'utente di selezionare un valore compreso tra -5 e 5 (che mappa in "fortemente in disaccordo" e "fortemente d'accordo"). Come posso creare una barra di ricerca con valori discreti? o c'è un widget di interfaccia utente migliore che potrei usare per questo?Barra di ricerca discreta nell'app per Android?

Grazie.

risposta

7

Non so quale sia il problema qui, si aggiunge una barra di ricerca con un intervallo di 0-10. Quindi è possibile mappare questi valori a -5 se si sottrae -5 dal valore selezionato.

EDIT

aggiungere android:max="10" al definiton xml e si ottiene una dimensione SeekBar fissa.

Forse dovresti considerare di aggiungere una vista testuale per indicare la rappresentazione testuale del valore selezionato corrente come: Forte disaccordo. Per aggiornare questa vista, iscriversi all'evento onProgressChanged e il parametro progress ti darà il numero scelto.

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

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

ho pensato seekbars guardano sempre e continuo atto? Speravo in un modo per mostrare i segni di graduazione per i valori, e per l'interazione con il bar di sentirsi discreti. – vee

+0

'SeekBar' restituisce un valore intero, quindi sarà numericamente discreto, almeno. – CommonsWare

17

Il Seekbar funziona alla grande con valori discreti. Usiamo una Seekbar per i dati discreti come mostrato di seguito. Per mostrare quale elemento è selezionato, cambiamo semplicemente il carattere della vista di testo selezionata in modo che sia più grande. Puoi anche evidenziare cambiando il colore dello sfondo o qualcosa del genere. Funziona piuttosto bene. Dovrai chiamare setMax (11) sulla barra di ricerca, e quindi nel tuo codice devi tradurre tra l'intervallo (da 0 a 11) e (da -5 a 5) in modo appropriato.

<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

questo è così vero, la barra di ricerca con stili personalizzati ha funzionato benissimo per me. – Ajibola

0

Spero che questo codice ti aiuti sicuramente. Prova questo ...

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

Benvenuti in Stack Overflow! Prestare attenzione quando si inviano copia e incolla di risposte boilerplate/verbatim a più domande, che tendono ad essere contrassegnate come "spammy" dalla comunità. Se lo fai, in genere significa che le domande sono doppie, quindi contrassegnali come tali. – Kev

0

1-st passo: impostare maxval a 10;

2-nd passo:

@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 Se si desidera implementare SeekBar discreta con il numero di lacune senza l'utilizzo di libreria di terze parti quindi utilizzare proprietà di stile di SeekBar.

<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

Come mettere l'icona sopra il cursore? – PeerNet

Problemi correlati