Antworten:
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);
maxLength
Versuchen Sie, das Array InputFilter.AllCaps()
an das editText.getFilters
Array anzuhängen, um zu vermeiden, dass die in xml festgelegten Filter überschrieben werden (z. B. ) . Siehe stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin ist wunderbar! <3
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.)
Stellen Sie das input type
auf TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. Das keyboard
sollte das ehren.
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
}
}
});
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 UpperCase
Buchstaben eingeben kann . Wenn sie möchten, können sie immer noch auf Kleinbuchstaben zurückgreifen. Wenn Sie sicherstellen möchten, dass die Ausgabe von Edittext
in Großbuchstaben erfolgt, müssen Sie die Eingabezeichenfolge mithilfe toUpperCase()
der String
Klassenmethode manuell konvertieren .
android:textAllCaps="true"
ist nur eine Eigenschaft von TextView ( stackoverflow.com/a/28803492/5268730 ). Verwenden Sie android:inputType="textCapCharacters"
stattdessen.
Sie sollten android:inputType="textCapCharacters"
mit Edittext in XML-Datei setzen.
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.
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!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
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.
Eingabefilter verwenden
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
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());
}
});
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"
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"
/>
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"
/>
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)
}
filters += InputFilter.AllCaps()
: D
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"
/>
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() });
Xamarin-Äquivalent zu ErlVoltons Antwort:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
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"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
.