web-dev-qa-db-fra.com

Android EditText/TextView comment faire en sorte que chaque mot commence par une majuscule et que tous les caractères restants soient en minuscules

J'ai déjà utilisé les options suivantes pour mettre chaque lettre de départ d'un mot en majuscule

 <EditText
    Android:inputType="text|textCapWords"/>

Lors de la frappe, l’utilisateur a l’option sur le clavier pour changer la casse de la lettre, c’est-à-dire que l’utilisateur avec cette option peut facilement taper des lettres lowercase.

De plus, je veux que le texte sur ma EditText soit sur ce format 

Each Starting Letter Of A Word Must Be In Uppercase And All Other Letter Of The Word Be In Lowercase

Signification, lorsque l'utilisateur entre 

each StArting LeTTer of a Word musT be in uppercase and all other leTTer of the Word be in lowercase

, il sera automatiquement converti au format ci-dessus.

J'ai essayé d'utiliser TextWatcher et string.split(\\s+) pour obtenir tous les mots, puis faire en sorte que chaque mot suive le format ci-dessus. Mais je finis toujours par avoir une erreur. Donc, s’il existe une solution, ce serait formidable.Je veux que cela fonctionne de la manière InputFilter.AllCaps.

C'est mon code jusqu'à présent

private void changeToUpperCase(String inputString) {
    if (inputString != null && inputString.trim().length() > 0) {
        // businessName.addTextChangedListener(null);
        String[] splitString = inputString.split("\\s+");
        int length = splitString.length;
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            String convertedString = splitString[i];
            stringBuffer.append(Character.toUpperCase(convertedString
                    .charAt(0)));
            stringBuffer.append(convertedString.substring(1).toLowerCase());
            stringBuffer.append(" ");
        }
        Log.i("changed String", stringBuffer.toString());
        // businessName.setText(stringBuffer.toString());
        stringBuffer.delete(0, stringBuffer.length());
        stringBuffer = null;
        // businessName.addTextChangedListener(this);
    }
}

J'appelle depuis TextWatcher, afterTextChanged(Editable s)

15
laaptu

Dans la mise en page xml, ajoutez Android:capitalize="sentences"

Les options pour Android:capitalize sont les suivantes:

Android:capitalize="none": qui ne capitalisera pas automatiquement.

Android:capitalize="sentences": qui mettra en majuscule le premier mot de chaque phrase.

Android:capitalize="words": qui majuscule la première lettre de chaque mot.

Android:capitalize="characters": qui mettra en majuscule chaque caractère.

Mettre à jour:

Comme Android:capitalize est obsolète, vous devez maintenant utiliser:

Android:inputType="textCapWords"
21
Shylendra Madda

changez votre type d'entrée par programmation.

Si vous êtes dans la disposition de la vue, utilisez ce code

EditText text = new EditText(context);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every Word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first Word of each sentence.
addView(text);

et si vous êtes en activité

EditText text = new EditText(this);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every Word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first Word of each sentence.
setContentView(text);
2
Sam

Essaye ça,

txtView.setText(WordUtils.capitalize("text view")

WordUtils.Java

public class WordUtils {

    public static String capitalize(String str) {
        return capitalize(str, (char[]) null);
    }

    public static String capitalize(String str, char... delimiters) {
        int delimLen = delimiters == null ? -1 : delimiters.length;
        if (!TextUtils.isEmpty(str) && delimLen != 0) {
            char[] buffer = str.toCharArray();
            boolean capitalizeNext = true;

            for (int i = 0; i < buffer.length; ++i) {
                char ch = buffer[i];
                if (isDelimiter(ch, delimiters)) {
                    capitalizeNext = true;
                } else if (capitalizeNext) {
                    buffer[i] = Character.toTitleCase(ch);
                    capitalizeNext = false;
                }
            }

            return new String(buffer);
        } else {
            return str;
        }
    }

    private static boolean isDelimiter(char ch, char[] delimiters) {
        if (delimiters == null) {
            return Character.isWhitespace(ch);
        } else {
            char[] arr$ = delimiters;
            int len$ = delimiters.length;

            for (int i$ = 0; i$ < len$; ++i$) {
                char delimiter = arr$[i$];
                if (ch == delimiter) {
                    return true;
                }
            }

            return false;
        }
    }
}​
1
Jaydipsinh Zala

Android:capitalize est obsolète. Utilisez inputType à la place.

1
Principiante