2010-08-16 17 views

Odpowiedz

73

W SeekBar ty can set only max value.

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

I nie można bezpośrednio ustawić minimalną wartość do SeekBar.

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

Jak widać min postęp można podsumować z min, które chciałbym - w przypadku 20.

+0

Dobrze, dzięki za kod ur, to działa, z wyjątkiem faktu, że widok tekstowy używam do ustawienia wartości progów, nie jest wyświetlany i Aplikacja uległa awarii. – iscavengers

+0

Przykro mi, koleś, waz na urlopie, dats y nie odpowiedziałeś .. a przegłosowano i aaccepeted d odpowiedz ... Ciesz się – iscavengers

+0

@Paresh: Dobra logika do ustawienia minimalnej wartości do seekbara. Wspaniały. . . –

22

Ustaw maksymalną wartość na 30 i dodaj 20 do wartości, które odczytałeś z SeekBar.

+1

To jest jedyna odpowiedź, która nie ma wpływu na pożądane maksimum – Flynny75

4

Najprostszym sposobem, aby to zrobić, to po prostu ograniczyć go w SeekBar.OnSeekBarChangeListener() dla SeekBar.

Najpierw należy utworzyć pole z wartością minimalną lub domyślną. Następnie ustawić tę wartość podczas tworzenia SeekBar:

private int fillDefault; 

W onCreateView() z Fragment lub onCreate wystąpienia Activity:

fillDefault = 20; 
fillSeekBar.setProgress(fillDefault); 

drugie, wdrożenie słuchacza do niej:

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

Działa . Prosta i niesamowite: D

+1

To rozwiązanie jest idealne, gdy ustawiasz dopełnienie w lewo na 0dp i chcesz uniknąć tego, że kciuk nakłada się na koniec paska wyszukiwania, np .: if (progress == 0) { seekBar.setProgress (1); } – PedroHidalgo

-3

Można spróbować to:

seekBar.setMax(max_value-min_value); 
0

Na przykład;

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) {} 
    }); 
Powiązane problemy