Chciałbym ustawić maksymalne i minimalne limity SeekBar na 50 i 20 odpowiednio.Jak ograniczyć pasek wyszukiwania
SeekBar ma bezpośrednią opcję górną, która zapewnia maksymalną wartość, ale jak ustawić jej minimalną wartość na 20 zamiast na 0?
Chciałbym ustawić maksymalne i minimalne limity SeekBar na 50 i 20 odpowiednio.Jak ograniczyć pasek wyszukiwania
SeekBar ma bezpośrednią opcję górną, która zapewnia maksymalną wartość, ale jak ustawić jej minimalną wartość na 20 zamiast na 0?
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.
Ustaw maksymalną wartość na 30 i dodaj 20 do wartości, które odczytałeś z SeekBar.
To jest jedyna odpowiedź, która nie ma wpływu na pożądane maksimum – Flynny75
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
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
Można spróbować to:
seekBar.setMax(max_value-min_value);
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) {}
});
Odpowiedziałem na to pytanie tutaj: How to set seekbar min and max value.
Za pomocą prostej matematyki można ustawić minimalną wartość, maksymalną wartość, a nawet krok paska wyszukiwania.
Mam nadzieję, że to pomoże!
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
Przykro mi, koleś, waz na urlopie, dats y nie odpowiedziałeś .. a przegłosowano i aaccepeted d odpowiedz ... Ciesz się – iscavengers
@Paresh: Dobra logika do ustawienia minimalnej wartości do seekbara. Wspaniały. . . –