Restricción de Android NumberPicker al teclado numérico para la entrada numérica (no teclado alfa)

¿Hay alguna manera de sugerir o restringir la entrada del teclado al seleccionar un NumberPicker, de modo que sólo se muestren los controles numéricos al introducir valores, similar a cómo se puede usar android:inputType="number" con EditText?

Tengo una serie de valores, de 0,0 a 100,0 en incrementos de 0,1 que me gustaría poder utilizar un NumberPicker para seleccionar en Android 4.3. Para poder seleccionar los números, he creado una matriz de cadenas que corresponde a estos valores, como se muestra a continuación:

  NumberPicker np = (NumberPicker) rootView.findViewById(R.id.programmingNumberPicker); int numberOfIntensityOptions = 1001; BigDecimal[] intensityDecimals = new BigDecimal[numberOfIntensityOptions]; for(int i = 0; i < intensityDecimals.length; i++ ) { // Gets exact representations of 0.1, 0.2, 0.3 ... 99.9, 100.0 intensityDecimals[i] = BigDecimal.valueOf(i).divide(BigDecimal.TEN); } intensityStrings = new String[numberOfIntensityOptions]; for(int i = 0; i < intensityDecimals.length; i ++) { intensityStrings[i] = intensityDecimals[i].toString(); } // this will allow a user to select numbers, and bring up a full keyboard. Alphabetic keys are // ignored - Can I somehow change the keyboard for this control to suggest to use *only* a number keyboard // to make it much more intuitive? np.setMinValue(0); np.setMaxValue(intensityStrings.length-1); np.setDisplayedValues(intensityStrings); np.setWrapSelectorWheel(false); 

Como más información, he notado que si no uso el método setDisplayedValues() y en su lugar los enteros directamente, el teclado numérico se utilizará, pero el problema aquí es que el número que se ingresó es 10 veces más de lo que debería ser – por ejemplo, si introduce "15" en el control su interpretado como "1.5"

  // This will allow a user to select using a number keyboard, but input needs to be 10x more than it should be. np.setMinValue(0); np.setMaxValue(numberOfIntensityOptions-1); np.setFormatter(new NumberPicker.Formatter() { @Override public String format(int value) { return BigDecimal.valueOf(value).divide(BigDecimal.TEN).toString(); } }); 

¿Alguna sugerencia sobre cómo levantar un teclado numérico para permitir que un usuario ingrese números decimales como éste?

He conseguido esto con éxito, pidiendo prestado fuertemente de la respuesta útil de @ LuksProg a otra pregunta. La idea básica es buscar el componente EditText de NumberPicker y asignar el tipo de entrada como numérico. Primero agregue este método (gracias de nuevo a @LuksProg):

 private EditText findInput(ViewGroup np) { int count = np.getChildCount(); for (int i = 0; i < count; i++) { final View child = np.getChildAt(i); if (child instanceof ViewGroup) { findInput((ViewGroup) child); } else if (child instanceof EditText) { return (EditText) child; } } return null; } 

A continuación, en el método onCreate () de mi actividad llamo a esto y configuro el tipo de entrada:

 np.setMinValue(0); np.setMaxValue(intensityStrings.length-1); EditText input = findInput(np); input.setInputType(InputType.TYPE_CLASS_NUMBER); 

Eso hizo el truco para mí!

Mi respuesta es mejorar sobre la base de Alan Moore, acaba de cambiar la última línea

  input.setInputType(InputType.TYPE_CLASS_NUMBER); 

a

  input.setRawInputType(InputType.TYPE_CLASS_NUMBER); 

Entonces no habrá más problemas como personne3000 dijo, no más accidentes. Siento que mi inglés no sea bueno, pero espero que puedas entender lo que quiero decir.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.