studio - En Android EditText, ¿cómo forzar a escribir mayúsculas?
edittext solo letras android (15)
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 = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;
<EditText>.setFilters(newFilters);
Debería poner android:inputType="textCapCharacters"
con Edittext en el archivo xml.
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.
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.
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() });
Mejor aún ... un trazador de líneas en Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
¡Hecho!
Para obtener un teclado en mayúscula al hacer clic en Editar texto, usa este código en tu xml,
<EditText
android:id="@+id/et"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:hint="Input your country"
android:padding="10dp"
android:inputType="textCapCharacters"
/>
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
.
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);
}
}
});
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)
}
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).
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"
Utilice el filtro de entrada
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
It is more easy,
Just do this,
// ****** Every first letter capital in word *********
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
/>
//***** if all letteres are capital ************
android:inputType="textCapCharacters"
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());
}
});