Wie repliziert man android:editable=”false” im Code?

Lesezeit: 4 Minuten

Wie repliziert man androideditablefalse im Code
Wütender Hacker

Im Layout können Sie die einstellen EditText Widget über das nicht editierbar sein android:editable attribute.

Wie kann ich das im Code machen? Ich muss die machen EditText Widget je nach Bedingungen bearbeitbar sein.

Wie repliziert man androideditablefalse im Code
Gerry

editText.setFocusable(false);
editText.setClickable(false);

Dies gewährleistet die EditText Steuerelement kann nicht ausgewählt und fokussiert werden, also kann es nicht bearbeitet werden.

  • Es kann aber auch nicht ausgewählt und kopiert werden.

    – James Moore

    2. Juli 2011 um 0:54 Uhr

Ich habe es gerade selbst ausprobiert,

So deaktivieren Sie die Textbearbeitung:

.setFocusable(false);

dies setzt auch setFocusableInTouchMode auf false!

So aktivieren Sie die Textbearbeitung:

setFocusableInTouchMode(true);

dies setzt auch setFocusable auf true;

Der beste Weg, dies zu tun, ist mit dieser einzelnen Codezeile:

textView.setKeyListener(null);

Die Dokumentation sagt für diese Methode:

Legt den Schlüssellistener fest, der mit dieser TextView verwendet werden soll. Dies kann null sein, um Benutzereingaben zu verbieten.

  • Das mag funktionieren, aber was ist, wenn Sie aufgrund bestimmter Kriterien zwischen bearbeitbar und nicht bearbeitbar wechseln müssen? Sie müssten Ihren eigenen KeyListener erstellen, um ihn wieder bearbeitbar zu machen, was sich falsch anfühlt.

    – John

    15. Juni 2011 um 14:12 Uhr

  • Hat auch andere Nebeneffekte, wie das Töten der Auswahl für die Kopie.

    – James Moore

    2. Juli 2011 um 0:55 Uhr

  • Was Christopher vorgeschlagen hat, sollte funktionieren. Es erlaubt Ihnen, Text aus dem Feld auszuwählen und zu kopieren, genauso als ob Sie das Feld als nicht bearbeitbar aus der XML definiert hätten (ich weiß nicht, wovon James spricht, aber es funktioniert zumindest auf Android 2.2.). Wenn Sie sich den Quellcode ansehen, ist das so ziemlich das, was getan wird, wenn das aktivierte xml-Attribut für eine beliebige TextView auf false gesetzt ist. Gemäß der Dokumentation müssen Sie möglicherweise setFocusable(true) aufrufen, nachdem Sie setKeyListener(null) aufgerufen haben.

    –Timo

    10. Dezember 2011 um 23:14 Uhr

  • @John Du kannst anrufen getKeyListener() zuerst und verstauen Sie es für später, können Sie nicht (wenn es zuvor festgelegt wurde)? Oder ordnen Sie den getInputType vielleicht manuell einem Schlüssel-Listener zu. Oder erzwingen Sie einfach einen bekannten guten Schlüsselzuhörer. ZB sollten Sie in der Lage sein, den Standard-TextKeyListener damit festzulegen (habe es nicht getestet): textView.setKeyListener(TextKeyListener.getInstance());

    –Timo

    10. Dezember 2011 um 23:20 Uhr


  • KeyListener-Dokumente: „Tastendrücke bei Soft-Input-Methoden sind nicht erforderlich, um die Methoden in diesem Listener auszulösen, und es wird sogar davon abgeraten, dies zu tun. und wird es nur für einige Tastendrücke an Anwendungen liefern, die auf Ice Cream Sandwich oder früher abzielen.

    – Stefan

    15. Februar 2013 um 17:52 Uhr

Wie repliziert man androideditablefalse im Code
abhi

android:editable="false" 
android:inputType="none" 

in deinem xml bzw

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setEnabled(false);

oder

EditText mEdit = (EditText) findViewById(R.id.yourid);
mEdit.setKeyListener(null);

  • Dies funktioniert nicht wie erwartet. Wenn Sie in dieser Lösung auf einen automatisch korrigierten Wortvorschlag klicken, wird das ausgewählte Wort entfernt.

    – Augiwan

    22. September 2015 um 8:49 Uhr

  • kann es atm nicht überprüfen, aber es hört sich so an, als ob @dlazar dieses Problem bereits erkannt und eine Lösung vorgeschlagen hat – es wurde der Antwort hinzugefügt

    – Josef Pfleger

    23. September 2015 um 16:43 Uhr

  • Ist es möglich, das Gegenteil zu tun? (Machen Sie den editText BEARBEITBAR)

    – Ali Bdeir

    15. Juli 2016 um 20:33 Uhr

  • Wenn Sie einen Teil des Textes auswählen, können Sie ihn löschen, indem Sie ein beliebiges Zeichen eingeben.

    – YUSMLE

    4. Oktober 2020 um 14:19 Uhr

1645702987 612 Wie repliziert man androideditablefalse im Code
Babasaheb

Sie können dies versuchen:

        mEditText.setFocusable(false);
        mEditText.setClickable(false);
        mEditText.setFocusableInTouchMode(false);
        mEditText.setLongClickable(false);
        mEditText.setInputType(InputType.TYPE_NULL);

Dadurch wird EditText vollständig deaktiviert. Deaktivieren Sie das lange Drücken, wenn Sie nicht möchten, dass der Benutzer die Optionen zum Bearbeiten von Text öffnet.

1645702988 19 Wie repliziert man androideditablefalse im Code
Wille

Ich sehe keine verwandte Methode für dieses Attribut in der EditText-Klasse. Es gibt jedoch andere ähnliche Dinge, die Sie verwenden könnten, z
android:focus/setFocusable(boolean) oder erstellen Sie eine andere TextView, deren
android:editable="false" und verwenden setVisiblilty() um zwischen den bearbeitbaren und nicht bearbeitbaren Ansichten zu wechseln. Wenn du benutzt View.GONE der Benutzer wird nie erfahren, dass es zwei EditTexts gibt.

Wenn Sie ehrgeizig sind, könnten Sie wahrscheinlich etwas mit den EditText’s anfangen onTextChanged Zuhörer mögen es, wenn es mit a reagiert setText.

1645702988 178 Wie repliziert man androideditablefalse im Code
dlazar

[Posting a new answer, since I can’t comment on Josef’s answer.]

Der Eingabefilter funktioniert gut, hat aber einen subtilen Fehler: Wenn Sie eine Auswahl überschreiben, wird der gesamte Text gelöscht.

Angenommen, Sie haben den Text "foo" in dem EditText. Wenn Sie alles auswählen (z. B. durch Doppelklick darauf) und eingeben 'a', der Text verschwindet. Dies liegt daran, dass die InputFilter wird aufgerufen als:

filter("a", 0, 1, "foo", 0, 3);

Der vorgeschlagene Eingabefilter gibt in diesem Fall den leeren String zurück (weil src.length() < 1 ist false), was den fehlenden Text erklärt.

Die Lösung ist einfach zurück dst.subSequence(dstart, dend) in der Filterfunktion. Dies funktioniert auch bei Löschungen problemlos.

842770cookie-checkWie repliziert man android:editable=”false” im Code?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy