Wie kann man EditText zwingen, Text mit Großbuchstaben zu beginnen?

78

Ich habe eine EditTextund ich brauche den Text darin (wenn der Benutzer eingibt), um mit Großbuchstaben zu beginnen.

Eugene
quelle
3
+1 für die Suchbarkeit: P
Anzeigename

Antworten:

160

Seien Sie vorsichtig, wenn Sie beide android:capitalize="sentences"und hinzufügen android:inputType="text", da letzterer Vorrang vor dem ersten zu haben scheint und die Eingabe nicht großgeschrieben wird.

Es gibt eine spezielle inputTypeMöglichkeit, den ersten Buchstaben automatisch groß zu schreiben:

android:inputType="textCapSentences"

Siehe http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

Maragues
quelle
1
Netter Tipp! Ich hatte beides und es funktionierte wie erwartet auf einem Nexus One und einem Galaxy Nexus. Auf einem HTC Sense-Gerät wurden die Wörter jedoch nicht großgeschrieben. android: inputType war der Trick.
BoD
10
Wort der Warnung: Da in meinem Fall das Feld der Name einer Person sein sollte, habe ich android gesetzt: inputType = "textPersonName". Dies funktionierte nicht wie erwartet: Ich musste android: inputType = "textCapWords" verwenden, um jedes Wort des Namens groß zu schreiben.
Jeff G
2
android: capitalize = "Sätze" sollte dieses Tag nicht verwenden, da es veraltet ist
PionierBhawna
Was ist, wenn android: inputType = "textMultiLine"?
KRP
12
Dann verwenden Sieandroid:inputType="textMultiLine|textCapSentences"
4mnes7y
23

Die Optionen für Android: Großschreibung sind

android:inputType="none", which won't automatically capitalize anything.

android:inputType="sentences", Which will capitalize the first word of each sentence.

android:inputType="words", Which Will Capitalize The First Letter Of Every Word.

android:inputType="characters", WHICH WILL CAPITALIZE EVERY CHARACTER.

Anscheinend wurde es auf inputTypestatt geändertcapitalize

DeadlyChambers
quelle
3
Diese Methode ist veraltet.
H8pathak
@ h8pathak inputType sollte zugunsten dieser Methode verwendet werden.
Joel Dean
17

Verwenden

android:inputType="textPersonName|textCapWords"

Da nur die Verwendung "textPersonName"nicht ausreicht, werden die Anfangsbuchstaben des Namens großgeschrieben.

Ähnliches gilt für Postanschriften:

android:inputType="textPostalAddress|textCapSentences"
ViliusK
quelle
Funktioniert nicht gut mit Namen wie "da Silva" oder "von Anhalt".
Schinken
8

Fügen Sie dies in Ihre XML

 android:inputType="textCapWords"

android:inputType="textCapSentences"wird für Sätze arbeiten. Ich musste jedoch jedes Wort in einem vollständigen Namensfeld groß schreiben.

Mukulg
quelle
6

Versuchen Sie es so,

testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

oder android:inputType="textCapSentences"funktioniert nur, wenn die automatische Großschreibung Ihrer Gerätetastatur aktiviert ist.

Lakshmanan
quelle
akzeptierte Antwort ist großartig, aber ich habe nach einer Codierungsantwort gesucht, das funktioniert. tx
Boris Gafurov
3

Fügen Sie in der Layout-XML hinzu android:inputType=textCapSentences

Mickey Tin
quelle
3

Sie haben das Wort "Erzwingen" verwendet. Also versuch das mal. Übergeben Sie einfach Ihren Edittext als Argument.

public static void setCapitalizeTextWatcher(final EditText editText) {
    final TextWatcher textWatcher = new TextWatcher() {

        int mStart = 0;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mStart = start + count;
        }

        @Override
        public void afterTextChanged(Editable s) {
             String input = s.toString();
            String capitalizedText;
            if (input.length() < 1)
                capitalizedText = input;
            else
                capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);
            if (!capitalizedText.equals(editText.getText().toString())) {
                editText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        editText.setSelection(mStart);
                        editText.removeTextChangedListener(this);
                    }
                });
                editText.setText(capitalizedText);
            }
        }
    };

    editText.addTextChangedListener(textWatcher);
}
Azim Ansari
quelle
2

Im Falle eines Passworts, das in Großbuchstaben beginnt, ist dies:

android:inputType="textPassword|textCapSentences"

Krzysztof Cieśliński
quelle
1

Fügen Sie dies in Ihren Edittext (xml) ein:

  android:capitalize="sentences"
Pihu
quelle
1
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
SAndroidD
quelle
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen. Dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!
Ashish Ahuja
1

Falls Sie auf den nervigen Fall gestoßen sind, Android zu setzen: inputType = textCapSentences und dann mit einzeiligem EditText zu enden, hier ist die Lösung:

    android:inputType="textCapSentences|textMultiLine"
awsleiman
quelle