Mam pasek wyszukiwania, przesuwając go chcę zmienić wartości od 0 do 200. Mam TextView, gdzie wyświetlają te wartości podczas poruszania seekbar. Ale nie chcę mieć każdej wartości z tego przedziału (0,1,2,3,4,5 ...), ale mieć 10, 20, 30 ... tak dalej. Więc kiedy przesuję pasek wyszukiwania, chcę wyświetlić 10,20,30,40 ... do 200. Czy ktoś może dać mi wskazówkę lub przykład, jak to zrobić?Zmiana wartości kroku w oknie wyszukiwania?
Odpowiedz
Spróbuj poniżej kod
SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.incrementProgressBy(10);
seekBar.setMax(200);
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(tvRadius.getText().toString().trim());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = progress/10;
progress = progress * 10;
seekBarValue.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
setProgress(int)
służy do ustawiania wartości wyjściowej paska wyszukiwania
setMax(int)
służy do ustawiania maksymalnej wartości szukać poprzeczkę
Jeśli chcesz ustaw granice paska wyszukiwania, następnie możesz sprawdzić wartość paska postępu w metodzie onProgressChanged
. Jeśli postęp jest mniejszy lub większy od granicy, możesz ustawić postęp do zdefiniowanej granicy.
Powinieneś użyć SeekBar.OnSeekBarChangeListener
do śledzenia zmiany postępu. Zadzwoń pod mseek.setMax(200)
. Wykonaj operację modulo na bieżącej wartości, aby zdecydować, czy tekst powinien zostać zaktualizowany, czy nie.
SeekBar.OnSeekBarChangeListener() {
void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress % 10 == 0) {
textview.setText(""+progress);
}
}
}
Prawdopodobnie przeskoczy wartości, jeśli pasek nie jest zbyt szeroki i/lub palec porusza się szybko. –
Zgadzam się. To była pierwsza rzecz, która przyszła mi do głowy. i słusznie nie jest właściwą odpowiedzią. – Ronnie
To jest ładny przykład, ale @Kris Van Bael ma rację, - pomija wartości. – lomza
easieset sposób mogę myśleć, jest po prostu określenia:
SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId);
yourSeekbar.setMax(20);
Następnie zastąpić te metody (wymagane są również puste metody, nawet jeśli są puste):
yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
if (progress >= 0 && progress <= sizeSeekBar.getMax()) {
String progressString = String.valueOf(progress * 10);
yourTextView.setText(progressString); // the TextView Reference
seekBar.setSecondaryProgress(progress);
}
}
}
});
Chodzi o to, aby zdefiniować tylko 20 wartości dla paska wyszukiwania, ale zawsze pomnóż wartość przez 10 i wyświetl tę wartość. Jeśli naprawdę nie potrzebujesz 200 wartości, nie ma sensu używanie 200 wartości.
+1 dla uproszczenia. Szukałem innego problemu, skończyłem tutaj, ale myślałem, że zasługujesz na +1 –
To wydaje się lepsze rozwiązanie na pewno. Podoba mi się, jak przeskakuje w prawo do następnego numeru. Postęp w czasie, gdy liczba jest statyczna, wydaje się dziwna. –
dla minimalnego problemu, możesz ustawić przesunięcie na swoich postępach. W ten sposób użytkownik nie może przekroczyć minimalnej wartości.
int offset = 10;
seekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.setMax(190); //with the offset, you need to adapt the max value
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(""+(seekBar.getProgress() + offset));
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress += offset;
seekBarValue.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
można również osiągnąć poprzez definiowanie niestandardowych SeekBar klasy jak poniżej
public class CustomSeekBar extends AppCompatSeekBar {
int SEEKBAR_MULTIPLIER = 1;
public CustomSeekBar(Context context) {
super(context);
}
public CustomSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setSeekBarConfig(int SEEKBAR_MULTIPLIER, int SEEKBAR_MAX){
setMax(SEEKBAR_MAX);
this.SEEKBAR_MULTIPLIER = SEEKBAR_MULTIPLIER;
}
@Override
public int getProgress() {
return super.getProgress() * SEEKBAR_MULTIPLIER;
}
}
i może korzystać przez następujący sposób
CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar);
mSeekBar.setSeekBarConfig(10,20);
w XML należy dodać CustomSeekBar zamiast SeekBar
<*.CustomSeekBar
com.quemb.qmbform.view:setSeekBarConfig="10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar" />
Abyś mógł ponownie użyć niestandardowego seekBar w całej aplikacji bez powtarzania całych dodatkowych obliczeń.
- 1. Zmiana wielkości kroku obiektu NumberPicker
- 2. Generowanie sekwencji o wartości kroku
- 3. Zmiana etykiety wyszukiwania DataTable
- 4. Wartości wyszukiwania w wektoryzacji
- 5. Typ wejścia HTML5 = zmiana kroku zmiany numeru
- 6. Zmiana kroku przyrostowego o auto_inrement o
- 7. Zmiana wartości w HashSet
- 8. Zmiana wartości w SQLite3
- 9. Zmiana wartości wejściowe w HTML5 datalist
- 10. Zmiana wartości w pliku machine.config
- 11. Zmiana wartości zmiennoprzecinkowej w exe
- 12. Zmiana wartości textNode
- 13. Zmiana nazwy przycisku wyszukiwania UISearchBar/klawiatury Tytuł
- 14. Zmiana wartości NSSlider programowo
- 15. Zmiana wartości R.String Programowo
- 16. Zmiana danych w oknie informacyjnym przy użyciu znaczników Google Map
- 17. Zmiana przechwytywania w aktywnym oknie (dla systemu Linux)
- 18. Wix: Zmiana właściwości w oknie dialogowym jest ignorowana podczas instalacji
- 19. Ropucha dla Oracle - zmiana formatowania w oknie wyjściowym DBMS
- 20. Zmiana tekstu przycisku w oknie wyskakującym okna gry Kendo
- 21. Zmiana narzędzi ActionBar i tła wyszukiwania
- 22. zmiana wartości ko.observable
- 23. history.pushState() zapytanie zmiana wartości
- 24. Weryfikacja kroku w Bazel
- 25. sqlite3 zmiana domyślnej wartości kolumny
- 26. Zmiana wartości statycznego zasobu wpf
- 27. Zmiana wartości aktualnie powtórzyć elementu w liście
- 28. Zmiana pojedynczej wartości zmiennej w tekście zapytania
- 29. Zmiana wartości elementu właściwości w PropertyGrid
- 30. Zmiana wartości podczas iteracji w golang
Wow, to tylko świetny przykład! W każdym razie, czy mogę ustawić minimalną wartość paska wyszukiwania na 10? Mogę ustawić maksimum, mówiąc "seekBar.setMax (200)", nie ma wartości minimalnej.Mam kilka pomysłów na temat tego, jak to zrobić, ale za każdym razem otrzymuję błędy ( – lomza
Użyj seekBar.setProgress (10), dla ustawionej wartości minimalnej na 10 w pasku wyszukiwania – Dharmendra
Rozwiązałem ten problem. Widzisz, kiedy właśnie ustawiłem postęp 10, nadal byłem w stanie ustawić 0, i chciałem niezdolny tej opcji (więc użytkownik nie może wybrać wartości mniejszej niż 10) Zrobiłem to, ale umieszczając instrukcję "if" w ChangeListener. – lomza