Dans mon application, j'ai un EditText. Je veux que l'utilisateur ait juste un accès en lecture, pas un accès en écriture . Dans le code, j'ai mis Android:enabled="false"
. Bien que l'arrière-plan de EditText soit devenu sombre, lorsque je clique dessus, le clavier s'ouvre et je peux modifier le texte.
Que dois-je faire? Merci
Je crois que le bon serait de mettre Android:editable="false"
.
Et si vous vous demandez pourquoi mon lien pointe vers les attributs de TextView
, la réponse est: EditText
hérite de TextView
:
EditText est un mince placage sur TextView qui se configure pour être éditable.
Mettre à jour:
Comme mentionné dans les commentaires ci-dessous, editable
est obsolète ( depuis l’API niveau 3 ). Vous devriez plutôt utiliser inputType
(avec la valeur none
).
utiliser EditText.setFocusable(false)
pour désactiver l'éditionEditText.setFocusableInTouchMode(true)
pour activer l'édition;
Utilisez ceci pour désactiver la saisie de l'utilisateur
Android:focusable="false"
Android: editable = "false" Cette méthode est déconseillée.
Vous pouvez essayer la méthode suivante:
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
EditText activé:
Désactivé EditText:
Cela fonctionne pour moi et j'espère que cela vous aidera.
Pour désactiver l'édition EditText
, je pense que nous pouvons utiliser focusable
OUenable
mais
Utilisation de Android:enabled=...
ou editText.setEnabled(...)
Il a également modifier la couleur du texte dans EditText
en gris.
Quand le clic n'a aucun effet
Utilisation de Android:focusable=...
ou editText.setFocusable(false)
- editText.setFocusableInTouchMode(true)
Il ne change pas la couleur du texte de EditText
Lorsque vous cliquez dessus, mettez en surbrillance la ligne EditText
pendant environ quelques millisecondes.
Sortie
Comme Android:editable="false"
est détruit.Vous pouvez utiliser InputType TYPE_NULL sur EditText
utilise comme ceci:
editText.setInputType(InputType.TYPE_NULL);
Comme Android:editable="false"
obsolète En XML
Utilisez
Android:enabled="false"
c'est simple. Pourquoi utiliser plus de code
Si vous voulez en classe Java, vous pouvez également utiliser un programme en classe Java
editText.setEnabled (false);
Simplement:
editText.setEnabled(false);
Définissez les propriétés ci-dessous dans la classe:
editText.setFocusable(false);
editText.setEnabled(false);
Cela fonctionnera sans problème selon vos besoins.
si vous utilisez Android:editable="false"
, Eclipse vous rappellera le message "Android: les modifications sont obsolètes: utilisez plutôt inputType".
Donc, j'utilise plutôt Android:focusable="false"
, cela a bien fonctionné pour moi.
Utilisez TextView
à la place.
Android:editable="false"
est maintenant obsolète et utiliser
YourEditText.setInputType(InputType.TYPE_NULL);
Essayez celui-ci, fonctionne bien pour moi:
public class CustomEdittext extends EditText {
Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onCheckIsTextEditor() {
// TODO Auto-generated method stub
return mIsTextEditor;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mIsTextEditor=false;
Boolean mOnTouchEvent=super.onTouchEvent(event);
mIsTextEditor=true;
return mOnTouchEvent;
} }
Remarque: vous devez ajouter this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
À votre activité sinon le clavier apparaîtra à la première fois.
Cela rendra votre edittext disabled .
editText.setEnabled(false);
Et en utilisant cette
editText.setInputType(InputType.TYPE_NULL);
Fera juste votre Edittext pas montrer votre clavier logiciel, mais s'il est connecté à un clavier physique, il vous permettra de taper.
Dans mon cas, j'avais besoin de ma EditText
pour faire défiler le texte si non. nombre de lignes dépasse maxLines
lorsqu’il est désactivé. Cette implémentation a parfaitement fonctionné pour moi.
private void setIsChatEditTextEditable(boolean value)
{
if(value)
{
mEdittext.setCursorVisible(true);
mEdittext.setSelection(chat_edittext.length());
// use new EditText(getApplicationContext()).getKeyListener()) if required below
mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());
}
else
{
mEdittext.setCursorVisible(false);
mEdittext.setKeyListener(null);
}
}
vous pouvez utiliser Android:focusable="false"
mais vous devez également désactiver le curseur sinon la fonction copier/coller fonctionnerait toujours.
alors, utilisez
Android:focusable="false"
Android:cursorVisible="false"
Aujourd'hui, j'utilise toujours editable="false"
, mais aussi avec focusable="false"
.
Je pense que nous devons rendre un EditText non éditable, c'est parce que nous voulons conserver son style EditText (avec le soulignement, l'indicateur, etc.), mais il accepte d'autres entrées que le texte. Par exemple une liste déroulante.
Dans un tel cas d'utilisation, il faut que la variable EditText
soit cliquable (donc enabled="false"
ne convient pas). Paramétrer focusable="false"
faire cette astuce, cependant, Je peux encore longtemps tenir l'EditText et y coller mon propre texte depuis le presse-papiers . En fonction de votre code et de sa gestion, cela peut même bloquer votre application.
J'ai donc aussi utilisé editable="false"
et maintenant tout va bien, sauf l'avertissement.
Comme certaines réponses le mentionnent, si vous désactivez le editText, il devient gris et si vous définissez false sur focusable, le curseur est affiché.
Si vous souhaitez le faire uniquement avec XML, cela a fait l'affaire
<YourFloatLabel
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/view_ads_search_select"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:focusable="true"
Android:clickable="true"/>
</YourFloatLabel>
J'ajoute simplement un FrameLayout apparaissant au-dessus du editText et le définit focusable et cliquable afin que le editText ne puisse pas être cliqué.
Pour désactiver la fonctionnalité d'un EditText, utilisez simplement:
EditText.setInputType(InputType.TYPE_NULL);
si vous voulez l'activer, vous pouvez utiliser:
EditText.setInputType(InputType.TYPE_CLASS_TEXT);
D'après le commentaire de @ Asymptote sur la réponse acceptée, utilisez:
myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);
... et Bob est ton oncle.