Establecer dígitos de EditText mediante programación


86

Básicamente, estoy tratando de establecer el valor de los dígitos de un EditText mediante programación. Hasta ahora tengo:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

Lo cual está bien, pero también quiero poder incluir un lugar decimal (.). ¿Algunas ideas?


1
Probablemente prefiera usar en DialerKeyListenerlugar deDigitsKeyListener
Dmitry Gryazin

Respuestas:


206

Prueba esto:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

Desde Código:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

Pero permite al usuario incluir varios "." Vea la respuesta de JoeyRA para números reales.


Eso está bien, pero quiero hacer esto programáticamente. La razón de esto es porque quiero reutilizar un diseño en múltiples situaciones, ya que este dígito es la única variable que cambia constantemente. Hacerlo en código es mucho más efectivo en mi situación.
ryandlf

2
Gracias. De hecho, creo que esta respuesta merece la marca de verificación porque es específica de lo que pedí, pero ambas soluciones funcionan.
ryandlf

@feresr, eso es extraño, porque mirando las TextViewfuentes: // If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
Dmitry Gryazin

¿De qué sirve .after 9?
Mitesh Shah

1
@MiteshShah permite el lugar decimal.
masterwok

30

Prueba esto:

weightInput.setInputType(InputType.TYPE_CLASS_NUMBER);          
weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

Devuelve un DigitsKeyListener que acepta los dígitos del 0 al 9, más el signo menos (solo al principio) y / o el punto decimal (solo uno por campo) si se especifica.

Esto resuelve el problema de los muchos '.' en EditText


1
Solo agregue una aclaración: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); para habilitar decimales y números negativos. editText.setKeyListener (DigitsKeyListener.getInstance (falso, verdadero)); para habilitar solo números decimales positivos. editText.setKeyListener (DigitsKeyListener.getInstance (falso, falso)); para habilitar solo enteros positivos.
SerSánGal

8
Pregunta: si lo hace setInputTypeuna y otra vez, ¿no anulará el segundo por el primero? Creo que deberías usar, weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);pero no estoy 100% seguro
Rafael Ruiz Muñoz

20

Utilice InputType.TYPE_NUMBER_FLAG_DECIMAL.

Consulte también: Tipos de entrada .


-1? Seguramente no hice eso. Tu solución funcionó, gracias.
ryandlf

Parece que se ha revertido. Encantado de ayudar.
Ricky

4

Para la entrada de dirección IP (varios puntos y números)

tratar

<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />

1
Tenga en cuenta que las direcciones IP hexadecimales (con partes que comienzan con 0x) también son válidas y el nombre de dominio se puede utilizar en lugar de la dirección IP.
Triang3l
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.