Ich möchte eine schreibgeschützte EditText
Ansicht erstellen. Das XML für diesen Code scheint zu sein android:editable="false"
, aber ich möchte dies im Code tun.
Wie kann ich das machen?
android
android-edittext
Warna
quelle
quelle
android:editable
für veraltet istEditText
.UI.setReadOnly(myEditText, true)
aus dieser Bibliothek . Es müssen einige Eigenschaften festgelegt werden, die Sie im Quellcode überprüfen können .android:inputType="none"
undandroid:textIsSelectable="true"
Antworten:
Bitte benutzen Sie diesen Code ..
quelle
Wenn Sie
setEnabled(false)
danneditText
deaktiviert aussehen würden (grau usw.). Möglicherweise möchten Sie den visuellen Aspekt Ihres Editors nicht ändern.Ein weniger aufdringlicher Weg wäre zu verwenden
setFocusable(false)
.Ich glaube, dass dies Ihre Frage näher an Ihrer ursprünglichen Absicht beantwortet.
quelle
setFocusable(false)
(und sogarsetFocusableInTouchMode(false)
mitsetClickable(false)
) verwenden, können Sie den Wert IhreseditText
DrückenseditText
für einige hundert Millisekunden ändern und diePaste
Option auswählen, es sei denn , die Systemzwischenablage ist leer. Ich habe es mit der neuesten verfügbaren API getestet, nämlich 23 .In
XML
Gebrauch:Als Beispiel:
quelle
editable
scheint das Attribut nicht veraltet zu sein (zumindest nicht ab API-Level 23).android:inputType="none"
android:inputType="none"
und die Daten können noch bearbeitet werden.Das funktioniert bei mir:
quelle
Das Beste ist,
TextView
stattdessen zu verwenden.quelle
Gemäß den Dokumenten dadurch verhindert, dass die Softtastatur angezeigt wird. Es verhindert auch das Einfügen, ermöglicht das Scrollen und ändert den visuellen Aspekt der Ansicht nicht. Dies verhindert jedoch auch das Auswählen und Kopieren des Texts in der Ansicht.
Aus meinen -tests
setInputType
zuTYPE_NULL
scheint funktional äquivalent zu dem abgeschrieben zu werdenandroid:editable="false"
. Darüber hinausandroid:inputType="none"
scheint keine spürbare Wirkung zu haben.quelle
android:inputType="none"
funktioniert es nicht mehr.android: editable = "false" ist veraltet. Daher können Sie es nicht verwenden, um den Bearbeitungstext schreibgeschützt zu machen.
Ich habe dies mit der folgenden Lösung gemacht. Hier habe ich benutzt
android: inputType = "keine"
android: textIsSelectable = "true"
android: focusable = "false"
Probieren Sie es aus :)
quelle
android:enabled="false"
kann eine gute Alternative sein.Dadurch erhalten Sie einen nicht bearbeitbaren EditText-Filter. Sie müssen zuerst den gewünschten Text in das Feld editText einfügen und dann diesen Filter anwenden.
quelle
return dst.subSequence(dstart, dend);
Das Schreiben dieser beiden Zeilen ist mehr als genug für Ihre Arbeit.
quelle
in XML eingestellt
quelle
Versuchen Sie es mit
quelle
Wenn gesetzt, gibt dies an, dass dies
TextView
eine Eingabemethode hat. Sofern nicht anders angegeben, handelt es sich um einen Text. FürTextView
, ist dies standardmäßig falsch. DennEditText
es ist standardmäßig wahr.Muss ein
boolean
Wert sein, entwedertrue
oderfalse
.Dies kann auch ein Verweis auf eine Ressource (im Formular
@[package:]type:name
) oder ein Themenattribut (im Formular?[package:][type:]name
) sein, die einen Wert dieses Typs enthält.Dies entspricht dem bearbeitbaren globalen Attributressourcensymbol.
Verwandte Methoden
quelle
Versuchen Sie, den onLongClick-Listener des Bearbeitungstextes zu überschreiben, um das Kontextmenü zu entfernen:
quelle
Verwenden Sie diesen Code:
Deaktivieren
editText
wird ein schreibgeschütztes Erscheinungsbild das jedoch auchtext-color
in Grau geändert wird , sodass die Textfarbe festgelegt werden muss.quelle
Dies ist meine Implementierung (etwas lang, aber nützlich für mich!): Mit diesem Code können Sie EditView schreibgeschützt oder normal machen. Selbst im schreibgeschützten Zustand kann der Text vom Benutzer kopiert werden. Sie können den Hintergrund ändern, damit er sich von einem normalen EditText unterscheidet.
Der Vorteil dieses Codes besteht darin, dass der EditText als normaler EditText angezeigt wird, der Inhalt jedoch nicht geändert werden kann. Der Rückgabewert sollte als Variable beibehalten werden, damit der schreibgeschützte Zustand wieder normal wird.
Um einen EditText schreibgeschützt zu machen, geben Sie ihn einfach wie folgt ein:
und um es normal zu machen, benutze tw aus der vorherigen Aussage:
quelle
Dies funktionierte für mich unter Berücksichtigung einiger der oben genannten Vorschläge. Macht das TextEdit fokussierbar, aber wenn der Benutzer klickt oder fokussiert, wird eine Liste mit Auswahlen in einem Popup-Fenster angezeigt. (Wir ersetzen das verrückte Spinner-Widget). TextEdit xml ist sehr allgemein ...
quelle
Wenn Sie nur in der Lage sein wollen , um Text von der Steuerung zu kopieren , aber nicht bearbeiten zu können , um es Sie vielleicht einen verwenden möchten Textview statt und Set Text ist frei wählbar .
Code:
xml:
Die Dokumentation von setTextIsSelectable lautet:
Allerdings musste ich focusable und focusableInTouchMode explizit auf true setzen, damit es mit Berührungseingaben funktioniert.
quelle
Dies war die einzige einfache Lösung für mich.
quelle
Ich hatte kein Problem damit, EditTextPreference schreibgeschützt zu machen, indem ich Folgendes verwendete:
Dies funktioniert gut, wenn das Feld "Zusammenfassung" zum Anzeigen schreibgeschützter Felder verwendet wird (nützlich zum Beispiel zum Anzeigen von Kontoinformationen). Das dynamische Aktualisieren der Zusammenfassungsfelder wurde von http://gmariotti.blogspot.com/2013/01/preferenceactivity-preferencefragment.html abgerufen
quelle
Stellen Sie dies in der EdiTextView-XML-Datei ein
quelle
Wie
android:editable=""
veraltet,Einstellung
android:clickable="false"
android:focusable="false"
android:inputType="none"
android:cursorVisible="false"
macht es "schreibgeschützt".
Benutzer können jedoch weiterhin in das Feld einfügen oder andere Aktionen mit langen Klicks ausführen. Um dies zu deaktivieren, überschreiben Sie einfach onLongClickListener ().
In Kotlin:
myEditText.setOnLongClickListener { true }
genügt.
quelle
Mein Ansatz hierfür war das Erstellen einer benutzerdefinierten TextWatcher-Klasse wie folgt:
Dann fügen Sie diesen Watcher einfach zu jedem Feld hinzu, das trotz Aktivierung schreibgeschützt werden soll:
quelle