En Android EditText, ¿cómo forzar a escribir mayúsculas?

En mi aplicación Android tengo diferentes EditText donde el usuario puede ingresar información. Pero necesito obligar al usuario a escribir en letras mayúsculas. ¿Conoces una función para hacer eso?

¡Android tiene un InputFilter incorporado solo para esto !

 edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()}); 

Tenga cuidado, setFilters restablecerá todos los demás atributos que se establecieron a través de XML (es decir, inputType , imeOptinos , imeOptinos …). Para evitar esto, agregue Filtro (s) a los ya existentes.

 InputFilter[] editFilters = .getFilters(); InputFilter[] newFilters = new InputFilter[editFilters.length + 1]; System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length); newFilters[editFilters.length] = ; .setFilters(newFilters); 

Si desea obligar al usuario a escribir en letras mayúsculas de forma predeterminada en su EditText, solo tiene que agregar android:inputType="textCapCharacters" . (El usuario aún puede cambiar manualmente a minúsculas).

Establezca el input type a TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS . El keyboard debería honrar eso.

Puede usar de dos formas.

Primera forma:

Establezca android:inputType="textCapSentences" en su EditText.

Segunda forma:

Cuando el usuario ingrese el número, debe usar el observador de texto y cambiar la letra pequeña a mayúscula.

 edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void afterTextChanged(Editable et) { String s=et.toString(); if(!s.equals(s.toUpperCase())) { s=s.toUpperCase(); edittext.setText(s); } } }); 

Puede agregar la android:textAllCaps="true" a su archivo xml en EditText. Esto obligará al teclado softinput a aparecer en el modo de mayúsculas. El valor que ingrese aparecerá en mayúscula. Sin embargo, esto no asegurará que el usuario solo pueda ingresar letras UpperCase . Si lo desean, aún pueden recurrir a las letras minúsculas. Si desea asegurarse de que la salida de Edittext está en mayúsculas, debe convertir manualmente la cadena de entrada usando el método toUpperCase() de String clase String .

En lugar de preocuparse por lidiar con el teclado, ¿por qué no simplemente aceptar cualquier entrada, minúscula o mayúscula y convertir la cadena a mayúscula?

El siguiente código debería ayudar:

 EditText edit = (EditText)findViewById(R.id.myEditText); String input; .... input = edit.getText(); input = input.toUpperCase(); //converts the string to uppercase 

Esto es fácil de usar, ya que es innecesario que el usuario sepa que necesita la cadena en mayúsculas. Espero que esto ayude.

Debería poner android:inputType="textCapCharacters" con Edittext en el archivo xml.

 edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void afterTextChanged(Editable et) { String s=et.toString(); if(!s.equals(s.toUpperCase())) { s=s.toUpperCase(); edittext.setText(s); } editText.setSelection(editText.getText().length()); } }); 

Solo haz esto:

 // ****** Every first letter capital in word *********  //***** if all letters are capital ************ android:inputType="textCapCharacters" 

Utilice el filtro de entrada

 editText = (EditText) findViewById(R.id.enteredText); editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()}); 

Mejor aún … un trazador de líneas en Kotlin

 // gets your previous attributes in XML, plus adds AllCaps filter .setFilters(.getFilters() + InputFilter.AllCaps()) 

¡Hecho!

En kotlin , en el archivo .kt realice los cambios:

 edit_text.filters = edit_text.filters + InputFilter.AllCaps() 

Utilice propiedad sintética para el acceso directo del widget con id. Y en XML, para su texto de edición agregue un par de indicadores más como:

  

Esto actualizará el teclado como mayúsculas habilitado.

Para obtener un teclado en mayúscula al hacer clic en Editar texto, usa este código en tu xml,

  

Según la respuesta aceptada, esta respuesta hace lo mismo, pero en Kotlin. Solo para facilitar el copiado: ·)

 private fun EditText.autocapitalize() { val allCapsFilter = InputFilter.AllCaps() setFilters(getFilters() + allCapsFilter) } 

Estoy usando Visual Studio 2015 / Xamarin para construir mi aplicación para Android 5.1 y Android 6.0 (la misma aplicación está instalada en ambos).

Cuando especifiqué android:inputType="textCapCharacters" en mi axml, el teclado AllCaps apareció como se esperaba en Android 6.0, pero no en Android 5.1. android:textAllCaps="true" a mi axml y todavía no hay ningún teclado AllCaps en Android 5.1. Establecí un filtro usando EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); y mientras el teclado suave muestra minúsculas en Android 5.1, el campo de entrada ahora es AllCaps.

EDITAR: Las diferencias de comportamiento que observé y asumí que estaban relacionadas con el sistema operativo se debieron en realidad a que tenía versiones diferentes de Google Keyboard en los dispositivos de prueba. Una vez que actualicé los dispositivos al último Google Keyboard (lanzado en julio de 2016 al momento de escribir esto), el comportamiento de “Todos los Caps” fue consistente en todos los sistemas operativos. Ahora, todos los dispositivos muestran caracteres en minúsculas en el teclado, pero la entrada es Todas mayúsculas debido a SetFilters(new IInputFilter[] { new InputFilterAllCaps() });

Para obtener todo el capital, use lo siguiente en su XML:

  

Simplemente, agregue el código siguiente a su EditText de su archivo xml.

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

Y si desea permitir tanto el texto en mayúsculas como los dígitos, utilice el código siguiente.

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"