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?

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

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


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.


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

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 .


@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.


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.


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!


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.


8

Eingabefilter verwenden

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

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

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"

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

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"
                    />

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"
/>

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

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

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"
    />

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


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

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


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.


-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"

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
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.