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!


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


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

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

20

pour Kotlin, il suffit d'appeler

textview.text = string.capitalize()

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.


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

2

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

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

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

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.