Wie erzwinge ich in Android EditText das Schreiben in Großbuchstaben?

144

In meiner Android-Anwendung habe ich verschiedene, EditTextwo der Benutzer Informationen eingeben kann. Aber ich muss den Benutzer zwingen, in Großbuchstaben zu schreiben. Kennen Sie eine Funktion, um das zu tun?

Natacha
quelle

Antworten:

340

Android hat tatsächlich einen eingebauten InputFilter nur dafür !

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

Seien Sie vorsichtig, setFilters werden alle anderen Attribute zurückgesetzt , die über XML gesetzt wurden (dh maxLines, inputType, imeOptinos...). Um dies zu verhindern, fügen Sie Filter zu den bereits vorhandenen hinzu.

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);
ErlVolton
quelle
3
Ja! Das ist die beste Antwort! Der Code sollte jedoch sein edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});.
Arthur
4
OK, Sie hatten Recht, ich habe meine Antwort aktualisiert. Vielen Dank für Ihre Hilfe!
ErlVolton
4
maxLengthVersuchen Sie, das Array InputFilter.AllCaps()an das editText.getFiltersArray anzuhängen, um zu vermeiden, dass die in xml festgelegten Filter überschrieben werden (z. B. ) . Siehe stackoverflow.com/a/18934659/3890983
tropicalfish
20
Oder nur in KotlineditText.filters = editText.filters + InputFilter.AllCaps()
Ilia Kurtov
4
Besser noch: editText.filters += InputFilter.AllCaps()Kotlin ist wunderbar! <3
Milack27
123

Wenn Sie den Benutzer zwingen möchten , in Großbuchstaben zu schreiben in Ihrem EditText standardmäßig , müssen Sie nur hinzufügen android:inputType="textCapCharacters". (Der Benutzer kann weiterhin manuell in Kleinbuchstaben wechseln.)

Aoyama Nanami
quelle
39
Nichts hindert den Benutzer daran, die Umschalttaste zu drücken und einen Kleinbuchstaben zu schreiben.
Fernando Leal
Stimmen Sie Fernando zu, obwohl die Tastatur standardmäßig Großbuchstaben verwendet, diese jedoch nicht benötigt.
Pforhan
Der Benutzer kann die Umschalttaste verwenden, um einen Kleinbuchstaben einzugeben, wie von @Fernando
Ajinkya
24

Stellen Sie das input typeauf TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. Das keyboardsollte das ehren.

Gabe Sechan
quelle
android: inputType = "textCapCharacters"
Parth Kapoor
18

Sie können zwei Wege verwenden.

Erster Weg:

einstellen android:inputType="textCapSentences" Sie auf Ihrem EditText.

Zweiter Weg:

Wenn der Benutzer die Nummer eingibt, müssen Sie Text Watcher verwenden und klein in Großbuchstaben ändern.

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  
Harshid
quelle
2
Ihre Lösung funktioniert nicht, da die Zeichenfolge in umgekehrter Reihenfolge festgelegt wird.
co2f2e
welchen Weg du zuerst oder zweitens benutzt hast.
Harshid
Erstens arbeitet man überhaupt nicht. Der zweite macht den Text groß, aber wir müssen den Cursor programmgesteuert auf das Ende des Satzes setzen.
co2f2e
@ Kalanamith ya dann was ist Problem
Harshid
6
Für die erste Option, bei der textCapSentences Sätze groß schreibt, benötigen Sie textCapCharacters.
Ghoti
13

Sie können die android:textAllCaps="true"Eigenschaft Ihrer XML-Datei im EditText hinzufügen. Dadurch wird die Softinput-Tastatur im All-Caps-Modus angezeigt. Der eingegebene Wert wird in Großbuchstaben angezeigt. Dies stellt jedoch nicht sicher, dass der Benutzer nur UpperCaseBuchstaben eingeben kann . Wenn sie möchten, können sie immer noch auf Kleinbuchstaben zurückgreifen. Wenn Sie sicherstellen möchten, dass die Ausgabe von Edittextin Großbuchstaben erfolgt, müssen Sie die Eingabezeichenfolge mithilfe toUpperCase()der StringKlassenmethode manuell konvertieren .

Abhishek
quelle
@GustavoAlves, kannst du mir einfach sagen, was passiert ist, als du das versucht hast? Vielleicht kann ich mich um Ihr Problem kümmern. :)
Abhishek
Hallo @Abhishek. Das Festlegen der Eigenschaft hat nichts geändert. Der EditText akzeptiert weiterhin sowohl Groß- als auch Kleinbuchstaben.
Gus Costa
1
Ja, wenn Sie Ihren EditText nur auf Großbuchstaben beschränken möchten, ist android: inputType = "textCapCharacters" für Sie die richtige Option. Probieren Sie es aus und lassen Sie es mich wissen. ☺️
Abhishek
1
Dies verursachte und indizierte eine Ausnahme außerhalb der Grenzen, wenn ich jeden tippte.
Zapnologica
2
android:textAllCaps="true"ist nur eine Eigenschaft von TextView ( stackoverflow.com/a/28803492/5268730 ). Verwenden Sie android:inputType="textCapCharacters"stattdessen.
Woodii
11

Sie sollten android:inputType="textCapCharacters"mit Edittext in XML-Datei setzen.

Pabel
quelle
9
AoyamaNanami schrieb genau die gleiche Antwort. Bitte konzentrieren Sie sich auf aktuellere Fragen, diese ist aus dem Jahr 2013. :)
ByteHamster
2
Beachten Sie, dass Benutzer niedrigere Zeichen verschieben und eingeben können
Rafa0809
10

Akzeptieren Sie keine Eingaben, Klein- oder Großbuchstaben und konvertieren Sie die Zeichenfolge in Großbuchstaben, anstatt sich um die Tastatur zu kümmern.

Der folgende Code sollte helfen:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

Dies ist benutzerfreundlich, da der Benutzer nicht wissen muss, dass Sie die Zeichenfolge in Großbuchstaben benötigen. Hoffe das hilft.

anthonycr
quelle
9

Noch besser ... ein Liner in Kotlin ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

Getan!

S Pimenta
quelle
2
Sie können es mit der Eigenschaftszugriffssyntax schreiben: <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
Makotosan
8
Besser noch:<your_edit_text>.filters += InputFilter.AllCaps()
Makotosan
9

In Kotlin , in .kt Datei Änderungen vornehmen:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

Verwenden Sie die synthetische Eigenschaft für den direkten Zugriff auf das Widget mit der ID. Und in XML fügen Sie für Ihren Bearbeitungstext ein paar weitere Flags hinzu als:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

Dadurch wird die Tastatur aktualisiert, wenn Großbuchstaben aktiviert sind.

Vishnu Benny
quelle
8

Eingabefilter verwenden

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
Sreejesh K Nair
quelle
6
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  
Anderson Carvalho
quelle
6

Mach das einfach:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"
Pravin Suthar
quelle
5

Versuchen Sie, einen der folgenden Codes zu verwenden, um Ihr Problem zu lösen.

programmatisch:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext
Nivedh
quelle
4

Für mich funktionierte es durch Hinzufügen von android: textAllCaps = "true" und android: inputType = "textCapCharacters"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />
Udara Abeythilake
quelle
3

Verwenden Sie in Ihrem XML Folgendes, um das gesamte Kapital zu erhalten:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>
Akshay Shetty
quelle
2
Haben Sie diese Lösung ausprobiert? Dies führt zu einem Absturz der Anwendung, wenn der Benutzer beginnt, den Inhalt von editext
surhidamatya am
3

Versuchen Sie diesen Code, um Ihre Eingabe in Großbuchstaben zu machen

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Agil anbu
quelle
2

Basierend auf der akzeptierten Antwort macht diese Antwort dasselbe, jedoch in Kotlin. Nur um das Copypasting zu vereinfachen: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}
Roc Boronat
quelle
1
filters += InputFilter.AllCaps(): D
crgarridos
1

Verwenden Sie diesen Code in Ihrer XML- Datei, um eine Tastatur mit Großbuchstaben zu erhalten, wenn Sie auf edittext klicken.

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />
Ashana.Jackol
quelle
1

Ich verwende Visual Studio 2015 / Xamarin, um meine App für Android 5.1 und Android 6.0 zu erstellen (auf beiden ist dieselbe apk installiert).

Als ich android:inputType="textCapCharacters"in meiner Axml angegeben habe, wurde die AllCaps-Tastatur unter Android 6.0 wie erwartet angezeigt, jedoch nicht unter Android 5.1. Ich android:textAllCaps="true"habe meiner Axml hinzugefügt und noch keine AllCaps-Tastatur unter Android 5.1. Ich habe einen Filter mit eingestellt EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });und während die Softtastatur unter Android 5.1 Kleinbuchstaben anzeigt, ist das Eingabefeld jetzt AllCaps.

BEARBEITEN: Die Verhaltensunterschiede, die ich beobachtet habe und von denen angenommen wurde, dass sie mit dem Betriebssystem zusammenhängen, waren tatsächlich darauf zurückzuführen, dass ich verschiedene Versionen von Google Keyboard auf den Testgeräten hatte. Nachdem ich die Geräte auf die neueste Google-Tastatur aktualisiert hatte (veröffentlicht im Juli 2016), war das Verhalten von "All Caps" für alle Betriebssysteme konsistent. Jetzt zeigen alle Geräte Kleinbuchstaben auf der Tastatur an, aber die Eingabe ist aufgrund von GroßbuchstabenSetFilters(new IInputFilter[] { new InputFilterAllCaps() });

Tony
quelle
1
Hallo Tony, anscheinend hast du 2 Accounts erstellt. stackoverflow.com/users/6764633/tony-celia und stackoverflow.com/users/6771440/deeveedee . Wenn Sie sie zusammenführen möchten, lesen Sie stackoverflow.com/help/merging-accounts .
Matt
Danke, Matt. Kreide dies bis zum Anfängerlernen / Fehler. Ich habe mich nicht daran erinnert, dass ich ein anderes Konto erstellt habe, bis Sie darauf hingewiesen haben. Zum Glück war die Funktion zum Zusammenführen von Konten einfach. Tolles Forum!
Tony
1

Xamarin-Äquivalent zu ErlVoltons Antwort:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
stovroz
quelle
Deshalb finde ich es toll, wie prägnant C # sein kann.
Lionet Chen
1

Einfache Kotlin-Realisierung

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS ist für mich filtersanfangs immer leer

Vlad
quelle
0

Ein Java 1-Liner der vorgeschlagenen Lösung könnte sein:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

Beachten Sie, dass es benötigt com.google.common.collect.Lists.

boriguen
quelle
-1

Fügen Sie einfach den folgenden Code zu Ihrem EditText Ihrer XML-Datei hinzu.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Wenn Sie sowohl Großbuchstaben als auch Ziffern zulassen möchten, verwenden Sie den folgenden Code.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
Khusboo
quelle
2
Das funktioniert sicher, aber es ist keine sehr schöne Benutzererfahrung. Ich habe es gerade ausprobiert und da die Tastatur nicht automatisch kapitalisiert wird (zumindest bei N), werden Zeichen in Kleinbuchstaben ohne Rückmeldung an den Benutzer einfach ignoriert, sodass die Benutzeroberfläche defekt erscheint.
MattMatt
stimme voll und ganz mit @MattMatt überein. In diesem Fall kann der Benutzer keine Kleinbuchstaben eingeben. Der Benutzer sollte in der Lage sein, den gewünschten Fall einzugeben, und der Rest sollte die Wörter automatisch in Großbuchstaben schreiben
Mir Adnan