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.


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


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


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"

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.


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.


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


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


2

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

android:inputType="textPassword|textCapSentences"


1

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

  android:capitalize="sentences"

1
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.