El inputType
numberDecimal
en EditText
utiliza el punto '.' como separador decimal En Europa es común usar una coma ',' en su lugar. Aunque mi configuración regional está establecida en alemán, el separador decimal sigue siendo el '.'
¿Hay alguna manera de obtener la coma como separador decimal?
Respuestas:
Una solución alternativa (hasta que Google solucione este error) es usar un
EditText
conandroid:inputType="numberDecimal"
yandroid:digits="0123456789.,"
.Luego agregue un TextChangedListener a EditText con el siguiente afterTextChanged:
fuente
Una variación de las soluciones de 'dígitos' que se ofrecen aquí:
Teniendo en cuenta el separador de configuración regional.
fuente
,
en sus teclados. Ejemplos: teclado Samsung (KitKat).Máscara de moneda de código siguiente para EditText ($ 123,125.155)
Diseño Xml
Código
fuente
Este es un error conocido en el SDK de Android. La única solución es crear su propio teclado virtual. Puede encontrar un ejemplo de implementación aquí .
fuente
La respuesta de Martins no funcionará si está creando instancias de EditText mediante programación. Seguí adelante y modifiqué la
DigitsKeyListener
clase incluida de API 14 para permitir tanto la coma como el punto como separador decimal.Para usar esto, llame
setKeyListener()
alEditText
, por ej.Sin embargo, todavía tienes que usar el truco de Martin en el
TextChangedListener
que reemplazas comas con puntosfuente
podría usar lo siguiente para diferentes configuraciones regionales
fuente
Puede usar la siguiente solución alternativa para incluir también una coma como entrada válida: -
A través de XML:
Programáticamente:
De esta manera, el sistema Android mostrará el teclado de los números y permitirá la entrada de coma. Espero que esto responda la pregunta :)
fuente
Para soluciones Mono (Droid):
fuente
Podrías hacer lo siguiente:
Y luego podría usar un filtro de entrada:
}
fuente
En mi humilde opinión, el mejor enfoque para este problema es utilizar el InputFilter. Una buena idea es aquí DecimalDigitsInputFilter . Entonces puedes simplemente:
fuente
para localizar su uso de entrada:
y luego agregue:
que no olvides reemplazar "," con "." para que Float o Double puedan analizarlo sin errores.
fuente
Todas las otras publicaciones aquí tenían agujeros importantes, así que aquí hay una solución que:
En el XML:
Variable de clase:
En onCreate, busque el separador utilizado en la configuración regional actual:
También en Crear, use esto para actualizarlo si está cargando un valor actual:
También en Crear, Agregar los oyentes
editTextWatcher
Ejemplo de doSomething (), convertir a período estándar para manipulación de datos
fuente
Android tiene un formateador de números incorporado.
Puede agregar esto a su
EditText
para permitir decimales y comas:android:inputType="numberDecimal"
yandroid:digits="0123456789.,"
Luego, en algún lugar de su código, ya sea cuando el usuario hace clic en guardar o después de ingresar el texto (use un oyente).
fuente
Decidí cambiar la coma por punto solo durante la edición. Aquí está mi solución simple, complicada y relativa:
someDecimalFormatter usará una coma o un punto depende de la configuración regional
fuente
No sé por qué tus respuestas son tan complicadas. Si hay un error en el SDK, debe anularlo o dar la vuelta.
Elegí la segunda forma de resolver ese problema. Si formatea su cadena como
Locale.ENGLISH
y luego la coloca enEditText
(incluso como una cadena vacía). Ejemplo:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
Persiguiendo esa solución, su resultado es compatible con el teclado que se muestra. Luego, los números flotantes y dobles funcionan de manera típica para lenguajes de programación con punto en lugar de coma.
fuente
Mi solución es:
En actividad principal:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
En archivo xml:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
y tomé el doble en editText como una cadena.
fuente
Puedo confirmar que las correcciones propuestas no funcionan en los IME de Samsung (al menos en S6 y S9) y quizás en LG. Todavía muestran un punto como separador decimal independientemente de la configuración regional. Cambiar al IME de Google soluciona esto, pero no es una opción para la mayoría de los desarrolladores.
Tampoco se ha reparado en Oreo para estos teclados, ya que es una solución que Samsung y / o LG tienen que hacer y luego empujar incluso a sus teléfonos antiguos.
En cambio, bifurqué el proyecto de teclado numérico y agregué un modo donde se comporta como un IME: fork . Vea la muestra del proyecto para más detalles. Esto ha funcionado bastante bien para mí y es similar a muchos de los IME falsos de "entrada de PIN" que ves en las aplicaciones bancarias.
fuente
Han pasado más de 8 años y estoy sorprendido, este problema aún no se ha solucionado ... Luché
con este problema simple ya que la respuesta más votada por @Martin permite escribir múltiples separadores, es decir, el usuario puede escribir "12 ,,, ,,, 12,1, 21,2, "
Además, la segunda preocupación es que en algunos dispositivos la coma no se muestra en el teclado numérico (o requiere presionar varias veces un botón de puntos)
Aquí está mi solución alternativa, que resuelve los problemas mencionados y permite al usuario escribir ''. y ',', pero en EditText verá el único separador decimal que corresponde a la configuración regional actual:
Y el observador de texto:
fuente
Solución simple, hacer un control personalizado. (Esto se hace en Android Xamarin, pero debería portarse fácilmente a Java)
fuente
Podría usar
inputType="phone"
, sin embargo, en ese caso, tendría que lidiar con múltiples,
o.
estar presente, por lo que sería necesaria una validación adicional.fuente
Creo que esta solución es menos compleja que las otras escritas aquí:
De esta manera cuando presionas el '.' en el teclado blando no pasa nada; solo se permiten números y comas.
fuente