Cómo poner en mayúscula la primera letra de texto en un TextView en una aplicación de Android

89

Tampoco me refiero a textInput. Quiero decir que una vez que tenga texto estático en un TextView (poblado desde una llamada de base de datos a datos ingresados ​​por el usuario (que pueden no estar en mayúscula)), ¿cómo puedo asegurarme de que estén en mayúscula?

¡Gracias!

Allen Gingrich
fuente
2
Para futuros visitantes ... En Kotlin solo use "abcd" .capitalize ())
Amit Tumkur

Respuestas:

181

Debería poder lograr esto a través de la manipulación estándar de cadenas de Java, nada específico de Android o TextView.

Algo como:

String upperString = myString.substring(0, 1).toUpperCase() + myString.substring(1).toLowerCase();

Aunque probablemente hay un millón de formas de lograrlo. Consulte la documentación de cadenas .

EDITADO Agregué el.toLowerCase()

Cheryl Simon
fuente
12
Solo quería señalar que esta es una buena solución para el inglés, pero no es fácil de localizar.
Billy Lazzaro
70

Lo siguiente no se aplica a TextView, pero funciona con EditText; incluso entonces, se aplica al texto ingresado desde el teclado, no al texto cargado con setText (). Para ser más específicos, activa las mayúsculas en el teclado y el usuario puede anular esto a su voluntad.

android:inputType="textCapSentences"

o

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Esto pondrá CAP a la primera letra.

o

compile 'org.apache.commons:commons-lang3:3.4' //in build.gradle module(app)

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));
Beto Caldas
fuente
79
Esto no se aplica a TextView, sino solo a EditText; incluso entonces, se aplica al texto ingresado desde el teclado, no al texto cargado con setText (). Para ser más específico, activa las mayúsculas en el teclado y el usuario puede anular esto a su voluntad.
Alex Cohn
28
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();
noloman
fuente
20

para Kotlin, solo llama

textview.text = string.capitalize()
Ben Kax
fuente
3
Pensé que escribiría con mayúscula cada palabra, pero de hecho funciona solo para la primera palabra.
Skoua
Si está usando esto en la aplicación multilingüe, pasar la configuración regional lo hace mejor.
Dharmendra Pratap Singh
2

Para mí nada de trabajo:

Función:

private String getCapsSentences(String tagName) {
    String[] splits = tagName.toLowerCase().split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splits.length; i++) {
        String eachWord = splits[i];
        if (i > 0 && eachWord.length() > 0) {
            sb.append(" ");
        }
        String cap = eachWord.substring(0, 1).toUpperCase() 
                + eachWord.substring(1);
        sb.append(cap);
    }
    return sb.toString();
}

Resultado:

Cerebro I / P brain O / P

I / P Brain and Health O / P Brain And Health

I / P brain And health a O / P Brain And Health

I / P brain's Health a O / P Brain's Health

I / P brain's Health and leg a O / P Brain's Health And Leg

Espero que esto te ayude.

Hiren Patel
fuente
2

La respuesta aceptada es buena, pero si la está usando para obtener valores de un textView en Android, sería bueno verificar si la cadena está vacía. Si la cadena está vacía, lanzaría una excepción.

private String capitizeString(String name){
    String captilizedString="";
    if(!name.trim().equals("")){
       captilizedString = name.substring(0,1).toUpperCase() + name.substring(1);
    }
    return captilizedString;
}
Sidharth V
fuente
2

Para Kotlin, si quieres estar seguro de que el formato es "Aaaaaaaaa" puedes usar:

myString.toLowerCase(Locale.getDefault()).capitalize()
VinceMedi
fuente
1

Cree un TextView personalizado y utilícelo:

public class CustomTextView extends TextView {

    public CapitalizedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        if (text.length() > 0) {
            text = String.valueOf(text.charAt(0)).toUpperCase() + text.subSequence(1, text.length());
        }
        super.setText(text, type);
    }
}
Shrini Jaiswal
fuente
¿Cómo hago para que este CustomTextView aparezca en Diseño de actividad / Fragmentos como elemento de interfaz de usuario de arrastrar y soltar?
Kostanos
0

Aquí he escrito un artículo detallado sobre el tema, ya que tenemos varias opciones, Capitalizar la primera letra de cadena en Android

Método para poner en mayúscula la primera letra de una cadena en Java

public static String capitalizeString(String str) {
        String retStr = str;
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
        }catch (Exception e){}
        return retStr;
}

Método para poner en mayúscula la primera letra de una cadena en Kotlin

fun capitalizeString(str: String): String {
        var retStr = str
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
        } catch (e: Exception) {
        }
        return retStr
}

Usando el atributo XML

O puede establecer este atributo en TextView o EditText en XML

android:inputType="textCapSentences"
Asad Ali Choudhry
fuente