Wie lässt sich die Textlänge eines Dokuments am besten begrenzen? EditText
in Android?
Gibt es eine Möglichkeit, dies über xml zu tun?
Wie lässt sich die Textlänge eines Dokuments am besten begrenzen? EditText
in Android?
Gibt es eine Möglichkeit, dies über xml zu tun?
Ich habe viele gute Lösungen gesehen, aber ich möchte eine meiner Meinung nach vollständigere und benutzerfreundlichere Lösung vorschlagen, die Folgendes umfasst:
1, Begrenzte Länge.
2, Wenn Sie mehr eingeben, geben Sie einen Rückruf, um Ihren Toast auszulösen.
3, Der Cursor kann in der Mitte oder am Ende stehen.
4, Der Benutzer kann durch Einfügen einer Zeichenfolge eingeben.
5, Überlauf-Eingabe immer verwerfen und Ursprung behalten.
public class LimitTextWatcher implements TextWatcher {
public interface IF_callback{
void callback(int left);
}
public IF_callback if_callback;
EditText editText;
int maxLength;
int cursorPositionLast;
String textLast;
boolean bypass;
public LimitTextWatcher(EditText editText, int maxLength, IF_callback if_callback) {
this.editText = editText;
this.maxLength = maxLength;
this.if_callback = if_callback;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (bypass) {
bypass = false;
} else {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(s);
textLast = stringBuilder.toString();
this.cursorPositionLast = editText.getSelectionStart();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length() > maxLength) {
int left = maxLength - s.toString().length();
bypass = true;
s.clear();
bypass = true;
s.append(textLast);
editText.setSelection(this.cursorPositionLast);
if (if_callback != null) {
if_callback.callback(left);
}
}
}
}
edit_text.addTextChangedListener(new LimitTextWatcher(edit_text, MAX_LENGTH, new LimitTextWatcher.IF_callback() {
@Override
public void callback(int left) {
if(left <= 0) {
Toast.makeText(MainActivity.this, "input is full", Toast.LENGTH_SHORT).show();
}
}
}));
Was ich nicht geschafft habe, ist, wenn der Benutzer einen Teil der aktuellen Eingabe markiert und versucht, eine sehr lange Zeichenfolge einzufügen, weiß ich nicht, wie ich die Markierung wiederherstellen kann.
Beispiel: Die maximale Länge ist auf 10 eingestellt, der Benutzer hat "12345678" eingegeben und "345" als Hervorhebung markiert, und er versucht, eine Zeichenfolge von "0000" einzufügen, was die Begrenzung überschreitet.
Wenn ich versuche, edit_text.setSelection(start=2, end=4) zu verwenden, um den Ursprungsstatus wiederherzustellen, ist das Ergebnis, dass nur 2 Leerzeichen als '12 345 678' eingefügt werden, nicht die Ursprungsmarkierung. Ich möchte, dass jemand das löst.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Ich wollte die maximale Anzahl von Zeichen für meinen EditText festlegen. Zuerst war es nicht offensichtlich, dass die Begrenzung der Textlänge dasselbe ist. (Nur eine Anmerkung für einen anderen verwirrten Reisenden).
0 Stimmen
El die richtige Antwort finden Sie hier : stackoverflow.com/a/19222238/276949 . Diese Antwort begrenzt die Länge UND verhindert, dass sich ein Puffer kontinuierlich füllt, nachdem er die Grenze erreicht hat, so dass Ihre Rücktaste richtig zu funktionieren.