Android EditText / TextView cómo hacer que cada palabra comience con mayúsculas y todos los demás caracteres de las palabras sean minúsculas
Ya he utilizado las siguientes opciones para hacer que cada letra inicial de una palabra mayúscula
<EditText android:inputType="text|textCapWords"/>
Al escribir el usuario tiene la opción en el teclado para cambiar el caso de letra, es decir, el usuario con esta opción puede escribir fácilmente letras lowercase
.
- Las sugerencias de auto de EditText están en blanco o no existen
- AlertDialog con EditText, abre el teclado virtual automáticamente con el enfoque en EditText no funciona
- Prevención del enfoque automático de EditText en un AlertDialog
- Compruebe si EditText está vacío.
- Extender un EditText en Android. ¿Qué estoy haciendo mal?
Además, quiero que el texto de mi EditText
esté en este formato
Each Starting Letter Of A Word Must Be In Uppercase And All Other Letter Of The Word Be In Lowercase
.
Significado, cuando el usuario ingresa
each StArting LeTTer of a word musT be in uppercase and all other leTTer of the word be in lowercase
, Se convertirá automáticamente al formato anterior.
He intentado usar TextWatcher
y string.split(\\s+)
para conseguir todas las palabras y después hacer cada palabra para seguir el formato antedicho. Pero siempre termino recibiendo error. Así que si hay alguna solución, sería InputFilter.AllCaps
. Quiero que esto funcione de la manera de InputFilter.AllCaps
.
Este es mi codigo hasta ahora
private void changeToUpperCase(String inputString) { if (inputString != null && inputString.trim().length() > 0) { // businessName.addTextChangedListener(null); String[] splitString = inputString.split("\\s+"); int length = splitString.length; StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < length; i++) { String convertedString = splitString[i]; stringBuffer.append(Character.toUpperCase(convertedString .charAt(0))); stringBuffer.append(convertedString.substring(1).toLowerCase()); stringBuffer.append(" "); } Log.i("changed String", stringBuffer.toString()); // businessName.setText(stringBuffer.toString()); stringBuffer.delete(0, stringBuffer.length()); stringBuffer = null; // businessName.addTextChangedListener(this); } }
Esta función estoy llamando desde TextWatcher
, afterTextChanged(Editable s)
- Implementación de etiquetas flotantes en línea (con EditText?)
- Cómo resolver No se puede conectar al editor para recuperar el error de texto
- Cómo implementar Multiline EditText con el botón ActionDone (sin el botón Enter)
- Android EditText escucha para el cambio de posición del cursor
- SetCompoundDrawablesWithIntrinsicBounds (int, int, int, int) no funciona
- Cómo comprobar el estado de visibilidad de EditText en android?
- ¿EditText.getText () alguna vez devuelve null?
- Android: Detectar evento de desplazamiento para EditText
En el layout xml
, añada android:capitalize="sentences"
Las opciones para android:capitalize
son las siguientes:
android:capitalize="none"
: no se capitalizará automáticamente nada.
android:capitalize="sentences"
: que hará mayúscula la primera palabra de cada oración.
android:capitalize="words"
: que hará mayúscula la primera letra de cada palabra.
android:capitalize="characters"
: que se capitalizará cada carácter.
Actualizar:
Como android:capitalize
está obsoleto ahora necesita usar:
android:inputType="textCapWords"
Cambiar su tipo de entrada mediante programación.
Si está en el modo de visualización que utiliza este código
EditText text = new EditText(context); text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word. text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character. text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence. addView(text);
Y si usted está en la actividad
EditText text = new EditText(this); text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word. text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character. text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence. setContentView(text);
Prueba esto,
txtView.setText(WordUtils.capitalize("text view")
WordUtils.java
public class WordUtils { public static String capitalize(String str) { return capitalize(str, (char[]) null); } public static String capitalize(String str, char... delimiters) { int delimLen = delimiters == null ? -1 : delimiters.length; if (!TextUtils.isEmpty(str) && delimLen != 0) { char[] buffer = str.toCharArray(); boolean capitalizeNext = true; for (int i = 0; i < buffer.length; ++i) { char ch = buffer[i]; if (isDelimiter(ch, delimiters)) { capitalizeNext = true; } else if (capitalizeNext) { buffer[i] = Character.toTitleCase(ch); capitalizeNext = false; } } return new String(buffer); } else { return str; } } private static boolean isDelimiter(char ch, char[] delimiters) { if (delimiters == null) { return Character.isWhitespace(ch); } else { char[] arr$ = delimiters; int len$ = delimiters.length; for (int i$ = 0; i$ < len$; ++i$) { char delimiter = arr$[i$]; if (ch == delimiter) { return true; } } return false; } } }
android:capitalize
está obsoleto. Utilice inputType
en inputType
lugar.
- OnContextItemSelected no se llama en un DialogFragment
- Iniciar Broadcast Receiver de una actividad en android