È possibile impostare l'intervallo di aumento/diminuzione di NumberPicker su un altro valore? Ad esempio a 50 (50, 100, 150, 200, 250 ecc.)? O richiede qualche personalizzazione/hack?Intervallo di incremento/decremento di NumberPicker
risposta
penso che si può fare questo:
inizializzare un displayed array values per la raccoglitrice:
int NUMBER_OF_VALUES = 10; //num of values in the picker int PICKER_RANGE = 50; ... String[] displayedValues = new String[NUMBER_OF_VALUES]; //Populate the array for(int i=0; i<NUMBER_OF_VALUES; i++) displayedValues[i] = String.valueOf(PICKER_RANGE * (i+1)); /* OR: if the array is easy to be hard-coded, then just hard-code it: String[] displayedValues = {"50", "100", "150", .....}; */
Impostare la matrice mostrata al selettore:
/* NOTE: Your picker range has to be [0, displayedValues.size()-1] to be consistent with the array index (displayedValues index). */ //ToDo: Initialize the picker first. numPicker.setMinValue(0); numPicker.setMaxValue(displayedValues.size()-1); numPicker.setDisplayedValues(displayedValues);
Quando vuoi ottenere/impostare il valore del selettore:
//To get the current value in the picker choosenValue = displayedValues[numPicker.getValue()]; //To set a new value (let's say 150) for(int i=0; i<displayedValues.length ; i++) if(displayedValues[i].equals("150")) numPicker.setValue(i);
Infine, v'è un grande widget di facile da personalizzare chiamato android-wheel. Puoi verificarlo e usarlo se vuoi.
L'ultimo punto di @ iturki che imposta un valore. Perché valueInNumberPicker X PICKER_RANGE = valueInDisplayedValueArray Così possiamo evitare il ciclo for per:
// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150
numPicker.setValue(150/PICKER_RANGE -1);
I miei 2 centesimi.
A proposito, ottima risposta di iturki.
Ho usato il onScrollListener per lo scorrimento con differenti dimensioni di fase e la onValueChanged per la movimentazione ingresso diretto con la tastiera numerica. Per l'uso è necessaria la variabile oldValue che è disponibile in entrambi gli ascoltatori.
int oldValue = 0;
Nel onScrollListener ho usato lo STATE_IDLE solo perché funziona e I don t capire al 100% la differenza per questo uso tra tutti e tre ... pensate di loro è possibile utilizzare per questo scopo.
È necessario che la variabile oldValue globale conosca il valore precedente prima di scorrere. Non ho trovato un'altra soluzione. Le clausole if sono il boarder min (0) e max (1000).
speedPicker.setValue(oldValue);
vitess.setProgress(oldValue);
((MainActivity) getActivity()).setSpeed(oldValue);
Questi tre chiamate aggiornare miei elementi (Vitesse è un ProgressBar accoppiato, speedPicker è il numberPicker).
In onValueChange aggiorno anche gli elementi e ho impostato il valore oldValue.
proposito stepSize qui è 100.
speedPicker.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChange(NumberPicker speedPicker, int scrollState) {
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
if (speedPicker.getValue() < oldValue){
if (speedPicker.getValue() >= 100)
oldValue-=100;
else
oldValue = 0;
}
else{
if (speedPicker.getValue() <= 900)
oldValue+=100;
else
oldValue = 1000;
}
speedPicker.setValue(oldValue);
vitess.setProgress(oldValue);
((MainActivity) getActivity()).setSpeed(oldValue);
}
else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_FLING) {
}
else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
}
}
});
speedPicker.setOnValueChangedListener(new OnValueChangeListener() {
public void onValueChange(NumberPicker speedPicker, int oldVal, int newVal) {
oldValue = oldVal;
speedPicker.setValue(newVal);
vitess.setProgress(newVal);
((MainActivity) getActivity()).setSpeed(newVal);
}
});
Questo codice funziona dopo alcuni test uscire bene per me.
Questa risposta è stata ispirata da jpintado. Vedere la sua risposta in Android NumberPicker OnValueChangeListener
Ma devo aggiungere qualcosa all'inizio, il primo a dire che 4-5 in/diminuisce di 1 sono riconosciuti da onValueChange! E dopo che il valore cambia di 100. – KelvinGradCelsius
- 1. Tastiera di cattura 'Fatto' per NumberPicker
- 2. Impostazione typeFace to NumberPicker
- 3. Android: NumberPicker non funziona
- 4. Intervallo di polilinee Intervallo di frigoriferi Gamma
- 5. Come diminuire imbottitura in NumberPicker
- 6. Modificare la dimensione del passo di un NumberPicker
- 7. Android NumberPicker che nasconde i pulsanti di incremento e decremento
- 8. Come ottenere il numero selezionato da NumberPicker?
- 9. numberpicker android per numeri in virgola mobile
- 10. Implementazione OnValueChange ad un NumberPicker in Android
- 11. Durata intervallo di tempo
- 12. intervallo di visualizzazione piacevolmente
- 13. Disattiva la tastiera virtuale su NumberPicker
- 14. Gruppo per intervallo di date settimane/mesi intervallo
- 15. intervallo di rendimento; - comportamento pazzo
- 16. vcovHC e intervallo di confidenza
- 17. Highstock - intervallo di tempo irregolare
- 18. Intervallo valido di rowid SQLite?
- 19. elasticsearch intervallo di date intersezione
- 20. analogico di MySQL DATE_SUB/INTERVALLO
- 21. intervallo sfumato di confidenza sfumato
- 22. Intervallo di decremento in Haskell
- 23. jQuery Validate (Intervallo di date)
- 24. Intervallo di spunta dell'Alta cifra
- 25. Espressioni di intervallo in Elm
- 26. Utilizzo di "celle" con "intervallo"
- 27. Intervallo di valori numerici validi
- 28. Intervallo UIDatePicker di 10 minuti?
- 29. Intervallo di input "time" HTML5
- 30. Intervallo reale scala, intervallo intermedi
Grazie per la risposta e la soluzione suggerita. Tuttavia, non vorrei limitare l'utente a inserire alcun valore preciso nel selettore.Ad esempio, se si desidera inserire il valore 47 o 48, si dovrebbe essere liberi di farlo. Questo è anche il comportamento predefinito del selettore di numeri se si tocca due volte il selettore. –
Quindi la tua domanda non riguarda l'aumento/decremento dell'intervallo di NumberPicker ?! – iTurki
Sicuro che lo sia. Quello che voglio è preimpostare l'intervallo di aumento/diminuzione durante lo scorrimento o l'utilizzo delle frecce su/giù di NumberPicker. Ma se tu come utente vuoi inserire un valore più preciso, tra questi intervalli dovresti essere autorizzato a farlo, come comportamento predefinito di NumberPicker. Non ho ancora testato la tua soluzione, quindi potrebbe essere che funzioni come descritto qui. –