Como colocar a primeira letra do texto em maiúscula em um TextView em um aplicativo Android

94

Não estou me referindo a textInput também. Quero dizer que, uma vez que você tem texto estático em um TextView (preenchido a partir de uma chamada de banco de dados para dados inseridos pelo usuário (que não podem estar em maiúscula)), como posso ter certeza de que estão capitalizados?

Obrigado!

Allen Gingrich
fonte
2
Para futuros visitantes ... Em Kotlin, basta usar "abcd" .capitalize ())
Amit Tumkur

Respostas:

186

Devo ser capaz de fazer isso por meio da manipulação de string java padrão, nada específico para Android ou TextView.

Algo como:

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

Embora haja provavelmente um milhão de maneiras de fazer isso. Consulte a documentação do String .

EDITADO adicionei o.toLowerCase()

Cheryl Simon
fonte
13
Só queria observar que esta é uma boa solução para o inglês, mas não é fácil de localizar.
Billy Lazzaro
71

A seguir não se aplica a TextView, mas funciona com EditText; mesmo assim, ele se aplica ao texto inserido no teclado, não ao texto carregado com setText (). Para ser mais específico, ele ativa Caps no teclado, e o usuário pode substituí-lo quando quiser.

android:inputType="textCapSentences"

ou

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Isso irá cobrir a primeira letra.

ou

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

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));
Beto Caldas
fonte
80
Isso não se aplica a TextView, mas apenas a EditText; mesmo assim, ele se aplica ao texto inserido no teclado, não ao texto carregado com setText (). Para ser mais específico, ele ativa Caps no teclado, e o usuário pode substituí-lo quando quiser.
Alex Cohn
30
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();
noloman
fonte
22

para Kotlin, basta ligar

textview.text = string.capitalize()
Ben Kax
fonte
3
Eu teria pensado que cada palavra seria maiúscula, mas na verdade está funcionando apenas para a primeira palavra.
Skoua 01 de
Se você estiver usando isso no aplicativo multilíngue, passar a localidade o torna melhor.
Dharmendra Pratap Singh
2

Para mim nada de trabalhar:

Função:

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:

Cérebro I / P brain O / P

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

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

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

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

Espero que isto te possa ajudar.

Hiren Patel
fonte
2

A resposta aceita é boa, mas se você a estiver usando para obter valores de um textView no android, seria bom verificar se a string está vazia. Se a string estiver vazia, será lançada uma exceção.

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

Para Kotlin, se você quiser ter certeza de que o formato é "Aaaaaaaaa", pode usar:

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

Crie um TextView personalizado e use-o:

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
fonte
como faço para que este CustomTextView apareça no Design de atividade / fragmentos como elemento de IU de arrastar e soltar?
Kostanos
0

Aqui, escrevi um artigo detalhado sobre o tópico, pois temos várias opções, Capitalize First Letter of String in Android

Método para capitalizar a primeira letra da string em 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 colocar a primeira letra da corda em maiúscula em 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 o atributo XML

Ou você pode definir este atributo em TextView ou EditText em XML

android:inputType="textCapSentences"
Asad Ali Choudhry
fonte