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 .

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)

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.

  • Tipo de entrada de EditText textCapSentences no funciona en Lollipop
  • EditText con una sola línea de texto, la línea de envolver y Hecho la acción?
  • Cómo detectar emoticonos en EditText en android
  • Android getText del campo EditarTexto
  • Obtener una cadena de texto de EditText?
  • Android TextInputLayout Cambiar contraseña no visible en la nueva biblioteca de soporte
  • Androide progreso dentro de edittext
  • Generar Editar Texto Programaticamente en android
  • EditText no captura ViewFlipper arroja?
  • Sugerencia EditText que no se muestra en 5.0.1
  • Editar el foco de texto en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.