Ho una barra di ricerca, mentre spostandola voglio cambiare i valori da 0 a 200. Ho un TextView, dove visualizzo quei valori mentre muovo la barra di ricerca. Ma non voglio avere ogni valore da quell'intervallo (0,1,2,3,4,5 ...), ma avere 10, 20, 30 ... così via. Quindi quando sposto la barra di ricerca, voglio visualizzare 10,20,30,40 .... a 200. Qualcuno può darmi un suggerimento o un esempio su come farlo?Modifica dei valori dei passaggi nella barra di ricerca?
risposta
Prova sottostante Codice
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)
viene utilizzato per impostare il valore iniziale della barra di ricerca
setMax(int)
viene utilizzato per impostare il valore massimo di barra di ricerca
Se si desidera impostare i limiti della barra di ricerca, quindi è possibile controllare il valore della barra di avanzamento nel metodo onProgressChanged
. Se il progresso è inferiore o superiore al limite, è possibile impostare l'avanzamento sul limite definito.
È necessario utilizzare SeekBar.OnSeekBarChangeListener
per tenere traccia della modifica dell'avanzamento. Chiama lo mseek.setMax(200)
. Esegui un'operazione modulo sul valore corrente per decidere se la visualizzazione testuale deve essere aggiornata o meno.
SeekBar.OnSeekBarChangeListener() {
void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress % 10 == 0) {
textview.setText(""+progress);
}
}
}
È probabile che salti i valori se la barra non è molto ampia e/o il tuo dito si muove velocemente. –
Accetto. Questa è stata la prima cosa che mi è venuta in mente. e giustamente non è la risposta giusta. – Ronnie
Questo è un buon esempio, ma @Kris Van Bael ha ragione, - salta i valori. – lomza
Il modo easieset posso pensare, è semplicemente definire:
SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId);
yourSeekbar.setMax(20);
Avanti, prevalere su tali metodi (sono necessari anche metodi vuoti, anche se sono vuote):
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);
}
}
}
});
L'idea è di definire solo 20 valori per la barra di ricerca, ma moltiplicare sempre il valore per 10 e visualizzare quel valore. Se non hai davvero bisogno di 200 valori, allora non ha senso usare 200 valori.
+1 per semplicità. Ho cercato un altro problema, sono finito qui, ma ho pensato che meritassi il +1 –
Questa sembra la soluzione migliore di sicuro. Mi piace come salta al prossimo numero. Andare avanti mentre il numero è statico sembra strano. –
per il problema minimo, è possibile impostare un offset sul vostro progresso. In questo modo, l'utente non può andare sotto il tuo valore minimo.
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) {
}
});
È inoltre possibile raggiungere questo obiettivo attraverso la definizione di classe SeekBar personalizzata come di seguito
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;
}
}
E possibile utilizzare seguendo modo
CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar);
mSeekBar.setSeekBarConfig(10,20);
in XML si dovrebbe aggiungere CustomSeekBar invece di SeekBar
<*.CustomSeekBar
com.quemb.qmbform.view:setSeekBarConfig="10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar" />
In modo che è possibile riutilizzare la barra di ricerca personalizzata in tutta l'app senza ripetere l'intero calcolo extra.
- 1. Modifica dei valori in HashSet
- 2. Modifica dei valori dell'array nella funzione - Assemblaggio in linea
- 3. Visualizzazione dei valori di modifica nell'etichetta JavaFx
- 4. Modifica dei valori delle variabili nelle sottoclassi?
- 5. WooCommerce: ricerca dei prodotti nella banca dati
- 6. Rimozione dei bordi arrotondati di una barra di ricerca personalizzata?
- 7. Uso dei passaggi da callout MapViewAccessoryControlTapped
- 8. Modifica dei risultati RenderTarget nella schermata viola?
- 9. Modifica dei dati nella prima presentare
- 10. Nome barra dei menu di modifica di Javafx
- 11. Elemento del pulsante della barra di navigazione mancante dopo lo stile dei passaggi "Sostituisci"
- 12. La barra di navigazione scompare nella vista della tabella dei risultati della ricerca
- 13. Ricerca vettorizzata dei valori nel dataframe di Pandas
- 14. come impostare manualmente l'intervallo nella barra dei colori?
- 15. C#: modifica dei valori per ogni elemento di un array
- 16. Ricerca dei valori n più alti in una mappa
- 17. Voci di menu non visualizzate nella barra dei menu
- 18. modifica dei colori dei fattori ggplot?
- 19. Android: priorità dei valori
- 20. Modifica dei valori Maven pom.xml <properties> fisicamente
- 21. Modifica dei valori dei parametri prima dell'invio al costruttore di base
- 22. Ordinamento dei valori null
- 23. Unisci valori della stessa chiave, nella lista dei dicts
- 24. Ottenimento dei valori dei punti medi delle barre raggruppate nella funzione del diagramma a barre tratteggiato
- 25. Modifica dei dati di SimpleCursorAdapter
- 26. modifica dei file .smali
- 27. Cripta di Laravel - Confronto dei valori
- 28. Modifica dei valori del dizionario in un ciclo foreach
- 29. Vai: modifica al posto dei valori della mappa
- 30. Modifica dei nomi dei file di sessione in Laravel 5.1
Wow, questo è solo un ottimo esempio! Ad ogni modo, posso impostare il valore minimo della barra di ricerca su 10? Posso impostare il massimo, dicendo 'seekBar.setMax (200)', non esiste un valore minimo.Ho alcune idee su come farlo, ma ottengo sempre errori ( – lomza
Usa seekBar.setProgress (10), per impostare il valore minimo su 10 nella barra di ricerca – Dharmendra
Ho risolto questo problema. Vedete, quando ho appena impostato un progresso per 10, ero ancora in grado di impostare 0, e non volevo questa opzione (quindi l'utente non può scegliere un valore inferiore a 10.) Ho fatto questo ma inserendo un'istruzione "if" in ChangeListener. – lomza