web-dev-qa-db-fra.com

Désactivation de EditText dans Android

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

157
Hesam

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).

205
Julian

utiliser EditText.setFocusable(false) pour désactiver l'édition
EditText.setFocusableInTouchMode(true) pour activer l'édition;

146
Sean Android

Utilisez ceci pour désactiver la saisie de l'utilisateur 

Android:focusable="false"

Android: editable = "false" Cette méthode est déconseillée.

54
Sampath Kumar

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é:

Enabled EditText

Désactivé EditText:

Disabled EditText

Cela fonctionne pour moi et j'espère que cela vous aidera.

47
Maksym Kalin

Pour désactiver l'édition EditText, je pense que nous pouvons utiliser focusableOUenable mais

  1. 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

  2. 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

 enter image description here

19
Linh

Comme Android:editable="false" est détruit.Vous pouvez utiliser InputType TYPE_NULL sur EditText

utilise comme ceci:

editText.setInputType(InputType.TYPE_NULL);
17
Bhargav Pandit

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);

15
android_jain

Simplement:

editText.setEnabled(false);
9
Oded Breiner

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.

5
Rank

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.

4
wangzhengyi

Utilisez TextView à la place.

4
cx0der
Android:editable="false"

est maintenant obsolète et utiliser

 YourEditText.setInputType(InputType.TYPE_NULL);
2
eranda methmal

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.

1
Favas Kv

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.

1
Mark Fajardo

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);
    }
}
1
Rishabh876

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"
0
M.Usman

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.

0
Sira Lam

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é. 

0
Vodet

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);
0
Samaritan

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.

0
Tom Howard