233 Stimmen

Deaktivieren des EditText in Android

In meiner Anwendung habe ich ein EditText, auf das der Benutzer nur Lesezugriff und keinen Schreibzugriff hat.

Im Code setze ich android:enabled="false".

Obwohl sich der Hintergrund des EditText dunkel verändert hat, erscheint beim Klicken die Tastatur und ich kann den Text ändern.

Was sollte ich einstellen, um das EditText zu deaktivieren?

0voto

M.Usman Punkte 1901

Sie können android:focusable="false" verwenden, müssen aber auch den Cursor deaktivieren, da sonst die Kopier- / Einfügefunktion immer noch funktionieren würde.

Also verwenden Sie

android:focusable="false"
android:cursorVisible="false"

0voto

Sira Lam Punkte 4823

Heute benutze ich immer noch editable="false", aber auch mit focusable="false".

Ich denke, der Fall, in dem wir ein EditText nicht bearbeitbar machen müssen, ist, weil wir seinen EditText-Stil beibehalten möchten (mit der Unterstreichung, mit dem Hinweis usw.), aber andere Eingaben statt Text akzeptiert. Zum Beispiel eine Dropdown-Liste.

In einem solchen Anwendungsfall müssen wir das EditText anklickbar haben (deshalb ist enabled="false" nicht geeignet). Durch das Festlegen von focusable="false" wird dieser Trick ausgeführt. Ich kann jedoch immer noch lange den EditText gedrückt halten und meinen eigenen Text daraus vom Clipboard einfügen. Je nach Ihrem Code und der Handhabung kann dies sogar Ihre App zum Absturz bringen.

Also habe ich auch editable="false" verwendet und jetzt ist alles super, außer der Warnung.

0voto

DeepBlue Punkte 507

Es gibt mehrere Möglichkeiten, mehrere Ebenen der Deaktivierung zu erreichen.

  • editText.setShowSoftInputOnFocus(false); und editText.setFocusable

verhindert, dass die Tastatur angezeigt wird - Texteingabe ist nicht möglich. Der Cursor ist jedoch weiterhin sichtbar und Benutzer können Text einfügen.

  • editText.setCursorVisible(false)

verbirgt den Cursor. Ich bin mir nicht sicher, warum man das tun würde. Der Benutzer kann Text eingeben und einfügen.

  • editText.setKeyListener(null)

Ich finde diesen Weg am praktischsten. Der Benutzer kann keinen Text eingeben, aber das Widget funktioniert weiterhin mit OnClickListener, wenn Sie eine Aktion auslösen möchten, wenn der Benutzer darauf tippt.

  • editText.setEnabled(false);

deaktiviert das EditText vollständig. Es ist buchstäblich 'schreibgeschützt', der Benutzer kann keinen Text eingeben und (zum Beispiel) OnClickListener funktioniert nicht damit.

TextEdit Dokumentation

0voto

Tom Howard Punkte 4176

Von @Asymptotes Kommentar zur akzeptierten Antwort verwenden:

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

...und fertig ist die Laube.

0voto

Annie Punkte 15

Dies funktioniert für mich:

android:focusable="false"

CodeJaeger.com

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.

Powered by:

X