¿Es posible establecer el intervalo de aumento/disminución de NumberPicker a otro valor? Por ejemplo, a 50 (50, 100, 150, 200, 250, etc.)? ¿O requiere alguna personalización/pirateo?Ajuste del intervalo de incremento/disminución de NumberPicker
Respuesta
Creo que se puede hacer esto:
Inicializar un displayed array values para su selector:
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", .....}; */
Establecer la matriz que se muestra a su selector:
/* 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);
Cuando desea obtener/establecer el valor del selector:
//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);
Por último, hay una gran widget de fácil de personalizar llamada android-wheel. Puede verificarlo y usarlo si lo desea.
El último punto de @ iturki establece un valor. Debido valueInNumberPicker X = PICKER_RANGE valueInDisplayedValueArray Así podemos evitar el bucle por:
// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150
numPicker.setValue(150/PICKER_RANGE -1);
Mis 2 centavos.
Por cierto, gran respuesta por iturki.
he utilizado el onScrollListener para el desplazamiento con diferentes tamaños de paso y la onValueChanged para el manejo de la entrada directa con el teclado numérico. Para el uso necesita la variable oldValue que está disponible en ambos oyentes.
int oldValue = 0;
En el onScrollListener he utilizado la STATE_IDLE sólo porque funciona y yo no entiendo 100% de la diferencia para este uso entre los tres ... creo que se puede utilizar ya sea para este propósito.
Necesita la variable global oldValue para conocer el valor anterior antes de desplazarse. No he encontrado otra solución. Las cláusulas if son las fronteras mín (0) y máx (1000).
speedPicker.setValue(oldValue);
vitess.setProgress(oldValue);
((MainActivity) getActivity()).setSpeed(oldValue);
Estos tres llamadas actualizar mis elementos (Vitess es un progressBar acoplada, speedPicker es la numberPicker).
En onValueChange actualizo también los elementos y configuro oldValue.
Por cierto tamaño de paso aquí es 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);
}
});
Este código funciona después de algunas pruebas dejar de fumar es bueno para mí.
Esta respuesta fue inspirada en jpintado. Vea su respuesta en Android NumberPicker OnValueChangeListener
Pero tengo que añadir algo al principio, los primeros digamos 4-5 in/decrece en 1 son reconocidos por el onValueChange! Y después de eso, el valor cambia por 100. – KelvinGradCelsius
- 1. Longitud del intervalo lubridate
- 2. Intervalo de reinicio del supervisor de Erlang
- 3. Intervalo real de Scala, Intervalo int
- 4. Android NumberPicker no ahorrar EditarTexto cambia
- 5. Ajuste del rendimiento Moodle
- 6. Usando el widget NumberPicker con cadenas
- 7. MySQL my.cnf recomendaciones de ajuste del rendimiento
- 8. Ajuste del volumen de una AVPlayer jugar
- 9. Visiblidad del botón de ajuste con MouseOver
- 10. ajuste del título de la ventana/foto
- 11. Implementación de Python del intervalo de puntuación de Wilson?
- 12. Android NumberPicker ocultar botones de incremento y decremento
- 13. Ajuste del interletraje en CSS
- 14. Html.DropDownList ajuste del elemento seleccionado
- 15. ¿DateTime dentro del intervalo en JodaTime?
- 16. Excluir 29 de febrero del intervalo de tiempo
- 17. Método de llamada particular después del intervalo de tiempo regular
- 18. Intervalo de temporizador máximo
- 19. Línea del diagrama de dispersión del mejor ajuste
- 20. PHP intervalo de fechas Comprobar
- 21. vcovHC e intervalo de confianza
- 22. JTextArea ajuste de ajuste de texto de palabra
- 23. Cómo cambiar el intervalo del eje x del gráfico
- 24. sendRedirect después del intervalo de tiempo evitando javascript o php
- 25. ajuste del tipo de MIME de documento de Excel
- 26. GridViewColumn ajuste de ancho
- 27. intervalo de tiempo y UTC
- 28. ISO 8601 intervalo de repetición
- 29. Android AutoSync Intervalo de ejecución?
- 30. Intervalo de fechas en PostgreSQL
Gracias por su respuesta y la solución sugerida. Sin embargo, no me gustaría restringir al usuario de poner ningún valor exacto en el selector.Por ejemplo, si desea poner el valor 47 o 48, debería tener libertad para hacerlo. Este es también el comportamiento predeterminado del selector de número si toca dos veces el selector. –
Por lo tanto, su pregunta no es acerca de 'aumentar/disminuir el intervalo de NumberPicker' ?! – iTurki
Claro que sí. Lo que quiero es preestablecer el intervalo de aumento/disminución al desplazarme o usar las flechas arriba/abajo de NumberPicker. Pero si usted como usuario desea poner un valor más preciso, entre esos intervalos se le debe permitir hacerlo, como el comportamiento predeterminado de NumberPicker. Todavía no he probado su solución, por lo que podría ser que funcione como se describe aquí. –