Je souhaite créer une vue en lecture seule EditText
. Le XML pour faire ce code semble être android:editable="false"
, mais je veux le faire dans le code.
Comment puis-je faire ceci?
android
android-edittext
Warna
la source
la source
android:editable
est obsolète pourEditText
.UI.setReadOnly(myEditText, true)
partir de cette bibliothèque . Il y a quelques propriétés qui doivent être définies, que vous pouvez vérifier dans le code source .android:inputType="none"
etandroid:textIsSelectable="true"
Réponses:
Veuillez utiliser ce code.
la source
Si vous avez
setEnabled(false)
alors l'editText
air désactivé (gris, etc.). Vous ne souhaiterez peut-être pas modifier l'aspect visuel de votre éditeur.Une manière moins intrusive serait d'utiliser
setFocusable(false)
.Je pense que cela répond à votre question plus proche de votre intention initiale.
la source
setFocusable(false)
(et mêmesetFocusableInTouchMode(false)
avecsetClickable(false)
), vous pouvez toujours modifier la valeur de votreeditText
appui sur votreeditText
pendant quelques centaines de millisecondes et en sélectionnant l'Paste
option à moins que le presse - papiers système ne soit vide. Je l'ai testé avec la dernière API disponible qui est 23 .En cours d'
XML
utilisation:Par exemple:
la source
editable
attribut ne semble pas être obsolète (du moins, pas à partir du niveau 23 d'API).android:inputType="none"
android:inputType="none"
et les données sont toujours modifiables.Cela fonctionne pour moi:
la source
Le mieux est d'utiliser à la
TextView
place.la source
Selon la documentation, cela empêche le clavier virtuel d'être affiché. Il empêche également le collage, permet le défilement et ne modifie pas l'aspect visuel de la vue. Cependant, cela empêche également la sélection et la copie du texte dans la vue.
De mes tests réglage
setInputType
àTYPE_NULL
semble être fonctionnellement équivalente à la dépréciéeandroid:editable="false"
. De plus,android:inputType="none"
semble n'avoir aucun effet notable.la source
android:inputType="none"
cela ne fonctionne plus.android: editable = "false" est obsolète. Par conséquent, vous ne pouvez pas l'utiliser pour rendre le texte d'édition en lecture seule.
J'ai fait cela en utilisant la solution ci-dessous. Ici, j'ai utilisé
android: inputType = "aucun"
android: textIsSelectable = "true"
android: focusable = "faux"
Essayez-le :)
la source
android:enabled="false"
peut être une bonne alternative.Cela vous donnera un filtre EditText non modifiable. vous devez d'abord mettre le texte souhaité dans le champ editText, puis appliquer ce filtre.
la source
return dst.subSequence(dstart, dend);
écrire ces deux lignes est plus que suffisant pour votre travail.
la source
défini en XML
la source
Essayez d'utiliser
la source
S'il est défini, spécifie qu'il
TextView
possède une méthode d'entrée. Ce sera un texte, sauf indication contraire. PourTextView
, c'est faux par défaut. CarEditText
, c'est vrai par défaut.Doit être une
boolean
valeur, soittrue
oufalse
.Cela peut également être une référence à une ressource (dans le formulaire
@[package:]type:name
) ou à un attribut de thème (dans le formulaire?[package:][type:]name
) contenant une valeur de ce type.Cela correspond au symbole de ressource attribut global modifiable.
Méthodes connexes
la source
Essayez de remplacer l'écouteur onLongClick du texte d'édition pour supprimer le menu contextuel:
la source
Utilisez ce code:
La désactivation
editText
donne un aspect et un comportement en lecture seule , mais change également letext-color
gris, il est donc nécessaire de définir sa couleur de texte.la source
voici mon implémentation (un peu longue, mais utile pour moi!): Avec ce code vous pouvez rendre EditView Read-only ou Normal. même en lecture seule, le texte peut être copié par l'utilisateur. vous pouvez changer le backgroud pour le rendre différent d'un EditText normal.
l'avantage de ce code est que le EditText est affiché en tant que EditText normal mais le contenu n'est pas modifiable. La valeur de retour doit être conservée en tant que variable pour pouvoir revenir de l'état en lecture seule à l'état normal.
pour rendre un EditText en lecture seule, il suffit de le mettre comme:
et pour le rendre normal, utilisez tw de la déclaration précédente:
la source
Cela a fonctionné pour moi, en tenant compte de plusieurs des suggestions ci-dessus. Rend le TextEdit focusable, mais si l'utilisateur clique ou se concentre, nous affichons une liste de sélections dans une PopupWindow. (Nous remplaçons le widget farfelu Spinner). TextEdit xml est très générique ...
la source
Si vous souhaitez simplement pouvoir copier du texte à partir du contrôle sans pouvoir le modifier, vous pouvez utiliser un TextView à la place et définir le texte est sélectionnable .
code:
xml:
La documentation de setTextIsSelectable dit:
Cependant, j'ai dû définir explicitement focusable et focusableInTouchMode sur true pour le faire fonctionner avec la saisie tactile.
la source
C'était la seule solution simple et complète pour moi.
la source
Je n'ai eu aucun problème à rendre EditTextPreference en lecture seule, en utilisant:
Cela fonctionne bien lorsqu'il est associé à l'utilisation du champ «résumé» pour afficher des champs en lecture seule (utile pour afficher les informations de compte, par exemple). Mise à jour des champs de résumé extraits dynamiquement de http://gmariotti.blogspot.com/2013/01/preferenceactivity-preferencefragment.html
la source
Définissez ceci dans le fichier xml EdiTextView
la source
Comme il
android:editable=""
est obsolète, leparamètre
android:clickable="false"
android:focusable="false"
android:inputType="none"
android:cursorVisible="false"
le rendra "en lecture seule".
Cependant, les utilisateurs pourront toujours coller dans le champ ou effectuer toute autre action de clic long. Pour désactiver cela, remplacez simplement onLongClickListener ().
À Kotlin:
myEditText.setOnLongClickListener { true }
suffit.
la source
Mon approche à ce sujet a été de créer une classe TextWatcher personnalisée comme suit:
Ensuite, vous ajoutez simplement cet observateur à n'importe quel champ que vous souhaitez être en lecture seule malgré son activation:
la source