2010-04-10 6 views
22

Ich möchte eine Suchleiste für eine Android-App erstellen, die es dem Benutzer erlaubt, einen Wert zwischen -5 und 5 zu wählen (was zu "stimme überhaupt nicht zu" und "stimme voll zu"). Wie mache ich eine Suchleiste mit diskreten Werten? oder gibt es ein besseres UI-Widget, das ich dafür verwenden könnte?Discrete Suchleiste in Android App?

Danke.

Antwort

7

Ich weiß nicht, was das Problem hier ist, fügen Sie eine Suchleiste mit einem Bereich von 0-10. Dann können Sie diese Werte auf -5 setzen, wenn Sie den Wert -5 vom ausgewählten Wert subtrahieren.

EDIT

android:max="10" zum xml definiton hinzufügen und Sie erhalten eine feste Größe seekbar.

Sie sollten vielleicht überlegen, eine Textansicht hinzuzufügen, um die Textdarstellung des aktuell ausgewählten Werts zu kennzeichnen, wie zum Beispiel: Trifft überhaupt nicht zu. Um diese Ansicht zu aktualisieren, abonnieren Sie onProgressChanged Ereignis und progress Parameter gibt Ihnen die gewählte Nummer.

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

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

ich dachte seekbars immer kontinuierlich aussehen und handeln? Ich hatte gehofft, dass es möglich sein würde, die Werte mit einem Häkchen zu versehen und sich mit der Bar diskret zu fühlen. – vee

+0

'SeekBar' gibt einen ganzzahligen Wert zurück, so dass es zumindest numerisch diskret ist. – CommonsWare

17

Die Seekbar funktioniert hervorragend für diskrete Werte. Wir verwenden eine Suchleiste für diskrete Daten, wie unten gezeigt. Um anzuzeigen, welches Element ausgewählt ist, ändern wir einfach die Schriftart der ausgewählten Textansicht, so dass sie größer ist. Sie können auch markieren, indem Sie die Hintergrundfarbe oder etwas ändern. Es funktioniert ziemlich gut. Sie werden setMax (11) in der Suchleiste aufrufen müssen, und dann müssen Sie in Ihrem Code zwischen dem Bereich (0 bis 11) und (-5 bis 5) entsprechend übersetzen.

<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

das ist so wahr, seekbar mit benutzerdefinierten Stilen funktionierte gut für mich. – Ajibola

0

Ich hoffe, dieser Code hilft Ihnen sicherlich. Diese Versuchen ...

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

Willkommen bei Stack Overflow! Seien Sie vorsichtig, wenn Sie kopierte und kopierte Wörter/Verbatim-Antworten auf mehrere Fragen veröffentlichen, diese werden von der Community als "Spam" markiert. Wenn Sie dies tun, bedeutet das normalerweise, dass die Fragen Duplikate sind, also kennzeichnen Sie sie stattdessen als solche. – Kev

0

1-st Schritt: set MAXVAL bis 10 ist;

2-nd Schritt:

@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 Wenn Sie diskrete seekbar mit der Anzahl der Lücken implementieren möchten, ohne Dritte Bibliothek dann Stil Eigenschaft seekbar verwenden.

<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

Wie setze ich ein Symbol über den Schieberegler? – PeerNet