android - ¿Cómo uso InputType=numberDecimal con el teclado del teléfono?
numeric-keypad (5)
El código de Adam Dunn funciona a la perfección, pero no muestra cómo implementar la clase
import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
public CustomDigitsKeyListener() {
super(false, false);
}
public CustomDigitsKeyListener(boolean sign, boolean decimal) {
super(sign, decimal);
}
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
entonces tienes que instancia como esta
MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));
Para un cuadro de EditText
de EditText
, el usuario solo debe ingresar números válidos, entonces estoy usando android:inputType="numberDecimal"
. Desafortunadamente, el teclado suave que Android muestra solo tiene números a lo largo de la fila superior, mientras que las siguientes tres filas tienen otros símbolos (signo de dólar, signo de porcentaje, signo de exclamación, espacio, etc.). Dado que numberDecimal
solo acepta los números 0-9, el signo negativo y el punto decimal, tendría más sentido utilizar el teclado numberDecimal
"teléfono" (0-9 en una cuadrícula de 3x3, más algunos otros símbolos). Esto haría que los botones fueran más grandes y más fáciles de presionar (ya que es una cuadrícula de 4x4 en lugar de una cuadrícula de 10x4 en la misma área de la pantalla). Desafortunadamente, el uso de android:inputType="phone"
permite caracteres no numéricos como paréntesis
He intentado usar android:inputType="numberDecimal|phone"
, pero el aspecto numberDecimal
la numberDecimal
de bit parece ser ignorado. También he intentado usar android:inputType="phone"
en combinación con android:digits="0123456789-."
, pero eso todavía permite múltiples signos negativos o puntos decimales ( inputType="number"
tiene un muy buen error en la comprobación de este tipo de cosas y no permite que el usuario lo escriba). También he intentado usar android:inputType="phone"
en el archivo de diseño xml, mientras utilizaba un DigitsKeyListener
en el código java, pero solo usa el teclado numérico predeterminado (el que tiene números solo en la fila superior) ( aparece para establecer InputType.TYPE_CLASS_NUMBER
, que anula el InputType.TYPE_CLASS_PHONE
establecido por el diseño xml).
Escribir un IME personalizado no funcionaría, ya que el usuario tendría que seleccionar el IME como una opción global fuera de la aplicación.
¿Hay alguna forma de usar el teclado suave estilo "teléfono" mientras también se usan las restricciones de "número" en lo que se ingresa?
Hasta ahora, lo que he decidido hacer es extender DigitsKeyListener y anular getInputType () para que devuelva InputType.TYPE_CLASS_PHONE. Esto me permite usar el filtro útil () en DigitsKeyListener, pero al mismo tiempo usar el teclado suave TYPE_CLASS_PHONE. Soy nuevo en la programación de Android, pero esto parece funcionar sin romper nada. El código es algo como esto:
import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
public CustomDigitsKeyListener() {
super(false, false);
}
public CustomDigitsKeyListener(boolean sign, boolean decimal) {
super(sign, decimal);
}
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
¿Hay algo de malo en hacer esto (cambiar el retorno de getInputType () a algo que la superclase no pretendía)?
Intente usar android:numeric="integer"
en su vista EditText.
Solo usa el teclado del teléfono y verifica la entrada por sí mismo. No es una condición muy grande para probar si la entrada es un dígito válido entre 0 y 9.
Yo tuve el mismo problema. Esto funciona para mí:
<item name="android:inputType">numberDecimal</item>
<item name="android:digits">0123456789.</item>
Esperemos que esto te ayude.