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?

ryandlf
fuente
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.

Mientras
fuente
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

JoeyRA
fuente
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 .

Ricky
fuente
-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" />
NAGESH MH
fuente
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