Comment mettre en majuscule la première lettre de texte dans un TextView dans une application Android

89

Je ne parle pas non plus de textInput. Je veux dire qu'une fois que vous avez du texte statique dans un TextView (alimenté à partir d'un appel de base de données vers des données entrées par l'utilisateur (qui peuvent ne pas être en majuscules)), comment puis-je m'assurer qu'ils sont en majuscules?

Merci!

Allen Gingrich
la source
2
Pour les futurs visiteurs ... À Kotlin, utilisez simplement "abcd" .capitalize ())
Amit Tumkur

Réponses:

181

Je devrais être capable d'accomplir cela grâce à une manipulation de chaîne Java standard, rien de spécifique à Android ou TextView.

Quelque chose comme:

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

Bien qu'il existe probablement un million de façons d'y parvenir. Consultez la documentation String .

EDITED J'ai ajouté le.toLowerCase()

Cheryl Simon
la source
12
Je voulais juste noter que c'est une bonne solution pour l'anglais, mais pas pour la localisation.
Billy Lazzaro
70

Ce qui suit ne s'applique pas à TextView, mais fonctionne avec EditText; même dans ce cas, il s'applique au texte saisi à partir du clavier, pas au texte chargé avec setText (). Pour être plus précis, il active les majuscules sur le clavier, et l'utilisateur peut remplacer cela à sa guise.

android:inputType="textCapSentences"

ou

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Cela mettra un CAP sur la première lettre.

ou

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

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));
Beto Caldas
la source
79
Cela ne s'applique pas à TextView, mais uniquement à EditText; même dans ce cas, il s'applique au texte saisi à partir du clavier, pas au texte chargé avec setText (). Pour être plus précis, il active les majuscules sur le clavier, et l'utilisateur peut remplacer cela à sa guise.
Alex Cohn
28
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();
noloman
la source
20

pour Kotlin, il suffit d'appeler

textview.text = string.capitalize()
Ben Kax
la source
3
J'aurais pensé que cela mettrait en majuscule chaque mot, mais cela ne fonctionne que pour le premier mot.
Skoua le
Si vous l'utilisez dans l'application multilingue, le fait de passer des paramètres régionaux améliore la situation.
Dharmendra Pratap Singh le
2

Pour moi, aucun travail:

Fonction:

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

Résultat:

Cerveau I / P brain O / P

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

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

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

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

J'espère que cela vous aidera.

Hiren Patel
la source
2

La réponse acceptée est bonne, mais si vous l'utilisez pour obtenir des valeurs à partir d'un textView sous Android, il serait bon de vérifier si la chaîne est vide. Si la chaîne est vide, elle lèvera une exception.

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

Pour Kotlin, si vous voulez être sûr que le format est "Aaaaaaaaa", vous pouvez utiliser:

myString.toLowerCase(Locale.getDefault()).capitalize()
VinceMedi
la source
1

Veuillez créer un TextView personnalisé et l'utiliser:

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
la source
Comment puis-je faire apparaître ce CustomTextView dans Design of Activity / Fragments en tant qu'élément d'interface utilisateur glisser-déposer?
Kostanos
0

Ici, j'ai écrit un article détaillé sur le sujet, car nous avons plusieurs options, Capitaliser la première lettre de chaîne dans Android

Méthode pour mettre en majuscule la première lettre d'une chaîne 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éthode pour mettre en majuscule la première lettre de chaîne dans 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
}

Utilisation de l'attribut XML

Ou vous pouvez définir cet attribut dans TextView ou EditText en XML

android:inputType="textCapSentences"
Asad Ali Choudhry
la source