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!


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()


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()));

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();

22

para Kotlin, basta ligar

textview.text = string.capitalize()

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.


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;
}

2

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

myString.toLowerCase(Locale.getDefault()).capitalize()

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);
    }
}

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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.