In meiner Anwendung habe ich einen EditText, für den der Benutzer nur Lesezugriff und keinen Schreibzugriff hat.
Im Code habe ich gesetzt android:enabled="false"
.
Obwohl der Hintergrund von EditText dunkel wurde, wird beim Klicken die Tastatur angezeigt und ich kann den Text ändern.
Was soll ich einstellen, um EditText zu deaktivieren?
android
android-edittext
Hesam
quelle
quelle
EditText
während diese Eigenschaften zu halten, benutzen Sie einfachUI.setReadOnly(myEditText, true)
aus dieser Bibliothek . Wenn Sie dieses Verhalten ohne die Bibliothek replizieren möchten, lesen Sie den Quellcode für diese kleine Methode.Antworten:
Ich glaube das richtige wäre zu setzen
android:editable="false"
.Und wenn Sie sich fragen, warum mein Link auf die Attribute von
TextView
verweist, lautet die Antwort, weilEditText
erbt vonTextView
:Update:
Wie in den Kommentaren unten erwähnt,
editable
ist es veraltet ( seit API-Level 3 ). Sie sollten stattdesseninputType
(mit dem Wertnone
) verwenden.quelle
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
funktioniert gut für mich (vergessen Sie veraltet, ich denke, Android: editierbar hat nichts mit Android: inputType zu tun)Verwenden Sie
EditText.setFocusable(false)
diese OptionEditText.setFocusableInTouchMode(true)
, um die Bearbeitung zu deaktivieren und die Bearbeitung zu aktivieren.quelle
editText.setEnabled(false);
wird die Textfarbe in Grau geändert. Spinner ändern jedoch die Textfarbe bei der Verwendung nichtsetEnabled
, was zu einer inkonsistenten Erfahrung führt.setFocusable(true)
? Siehe diesen Link für den Unterschied zwischensetFocusable()
undsetFocusableInTouchMode()
: stackoverflow.com/questions/23799064/…Sie können die folgende Methode ausprobieren:
EditText aktiviert:
EditText deaktiviert:
Es funktioniert für mich und hoffe, es hilft Ihnen.
quelle
editText.setFocusableInTouchMode(true)
stattdessen anrufeneditText.setFocusable(true)
.Verwenden Sie diese Option, um Benutzereingaben zu deaktivieren
android: editable = "false" Diese Methode ist veraltet.
quelle
Für disable bearbeiten
EditText
, ich denke , wir verwenden könnenfocusable
oderenable
aberVerwenden von
android:enabled=...
odereditText.setEnabled(...)
Außerdem wird die Textfarbe in
EditText
Grau geändert .Wenn Sie darauf klicken, hat dies keine Auswirkung
Verwenden von
android:focusable=...
odereditText.setFocusable(false)
-editText.setFocusableInTouchMode(true)
Es ändert sich nicht , Textfarbe
EditText
Wenn angeklickt haben die Highlights
EditText
unterm Strich für etwa einige MillisekundenAusgabe
quelle
Wie
android:editable="false"
ist depricated.You Input verwenden können TYPE_NULL auf EditTextVerwendung wie folgt:
quelle
Wie
android:editable="false"
veraltet inxml
Wenn Sie möchten
java class
, können Sie dies auch programmgesteuert verwendenquelle
Einfach:
quelle
Legen Sie die folgenden Eigenschaften in der Klasse fest:
Es wird reibungslos funktionieren, wie Sie es benötigen.
quelle
enabled
war ausreichendUm die Funktionalität eines EditText zu deaktivieren, verwenden Sie einfach:
Wenn Sie es auf irgendeine Weise aktivieren möchten, können Sie Folgendes verwenden:
quelle
Wenn Sie verwenden
android:editable="false"
, erinnert Sie Eclipse an die Meldung "android: editierbar ist veraltet: Verwenden Sie stattdessen inputType".Also benutze ich
android:focusable="false"
stattdessen, es hat gut für mich funktioniert.quelle
ist jetzt veraltet und verwenden
quelle
TYPE_TEXT_VARIATION_PASSWORD
folgen. Folgen Sie diesem für weitere Entwickler.android.com/reference/android/text/InputTypeVerwenden Sie
TextView
stattdessen.quelle
Deaktivieren = FOCUS + CLICK + CURSOR
Das Deaktivieren der Fokus-, Klick- und Cursorsichtbarkeit macht den Trick für mich.
quelle
Dadurch wird Ihr Edittext deaktiviert .
Und damit
Ihr Edittext zeigt nur nicht Ihr Softkeyboard an , aber wenn es mit einer physischen Tastatur verbunden ist, können Sie tippen.
quelle
Ich verwende die neu veröffentlichte Material Design Library von Google. In meinem Fall funktioniert es, wenn ich android: focusable = "false" und android: cursorVisible = "false" verwende.
quelle
In meinem Fall musste ich meinen
EditText
Text scrollen, wenn nein. Anzahl der Zeilen überschreitet,maxLines
wenn es deaktiviert ist. Diese Implementierung hat bei mir perfekt funktioniert.quelle
Versuchen Sie dieses, funktioniert gut für mich:
Hinweis: Sie müssen hinzufügen
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
auf Ihre Aktivität oder sonstkeyboard
wird Popup zum ersten Mal.quelle
Wie einige Antworten erwähnen, wird der Cursor angezeigt, wenn Sie den editText deaktivieren und wenn Sie fokussierbar auf false setzen.
Wenn Sie es nur mit XML machen möchten, hat dies den Trick getan
Ich füge einfach ein FrameLayout hinzu, das über dem editText angezeigt wird, und setze es fokussierbar und anklickbar, damit der editText nicht angeklickt werden kann.
quelle
Das funktioniert bei mir:
android: focusable = "false"
quelle
Verwenden Sie im Kommentar von @ Asymptote zur akzeptierten Antwort Folgendes:
... und Bob ist dein Onkel.
quelle
Heute benutze ich noch
editable="false"
, aber auch mitfocusable="false"
.Ich denke, wir müssen einen EditText nicht bearbeitbar machen, weil wir seinen EditText-Stil beibehalten möchten (mit dieser Unterstreichung, mit Hinweisen usw.), aber andere Eingaben anstelle von Text akzeptieren. Zum Beispiel eine Dropdown-Liste.
In einem solchen Anwendungsfall müssen wir das
EditText
anklickbare haben (ist alsoenabled="false"
nicht geeignet). Wennfocusable="false"
Sie diesen Trick ausführen , kann ich den EditText noch lange gedrückt halten und meinen eigenen Text aus der Zwischenablage einfügen . Abhängig von Ihrem Code und Ihrer Handhabung kann dies sogar zum Absturz Ihrer App führen.Also habe ich auch benutzt
editable="false"
und jetzt ist alles super, bis auf die Warnung.quelle
Sie können den
android:focusable="false"
Cursor verwenden , müssen ihn aber auch deaktivieren, da sonst die Funktion zum Kopieren / Einfügen weiterhin funktioniert.also benutze
quelle
Es gibt mehrere Möglichkeiten, um mehrere Ebenen von Behinderten zu erreichen.
editText.setShowSoftInputOnFocus(false);
undeditText.setFocusable
verhindert, dass die
EditText
Tastatur in einem Text angezeigt wird. Der Cursor ist jedoch weiterhin sichtbar und der Benutzer kann Text einfügen.editText.setCursorVisible(false)
versteckt den Cursor. Ich bin mir nicht sicher, warum du das tun willst. Der Benutzer kann Text eingeben und einfügen.
editText.setKeyListener(null)
Ich finde diesen Weg am bequemsten. Es gibt keine Möglichkeit, wie Benutzer Text eingeben können, aber das Widget funktioniert weiterhin,
OnClickListener
wenn Sie eine Aktion auslösen möchten, wenn der Benutzer sie berührteditText.setEnabled(false);
vollständig deaktiviert
EditText
. Es ist buchstäblich schreibgeschützt, der Benutzer kann keinen Text eingeben undOnClickListener
funktioniert (zum Beispiel) nicht damit.TextEdit- Dokumentation
quelle
Stellen Sie dies in Ihrem XML-Code ein. Es funktioniert.
android: focusableInTouchMode = "false"
quelle