Sélectionnez tout le texte dans EditText lorsqu'il obtient le focus


230

J'ai un EditText avec du texte factice. Lorsque l'utilisateur clique dessus, je veux qu'il soit sélectionné de sorte que lorsque l'utilisateur commence à taper le texte factice soit supprimé.

Comment puis-je atteindre cet objectif?

Réponses:


517

Vous pouvez essayer dans votre main.xmlfichier:

android:selectAllOnFocus="true"

Ou, en Java, utilisez

editText.setSelectAllOnFocus(true);

17
Je viens d'apprendre que cela ne fonctionne pas, si dans le XML EditText il y a une balise </requestFocus> insérée par le générateur d'interface utilisateur.
machtnix

@machtnix Ajouter le focus à un autre composant: stackoverflow.com/a/1662088/1020871
Love

160
editText.setSelectAllOnFocus(true);

Cela fonctionne si vous voulez le faire par programme.


2
Aussi pour moi .. la solution ci-dessus n'a pas fonctionné en quelque sorte .. le programme a fonctionné
Martin Christmann

3
Pour ceux qui ont toujours des problèmes avec la réponse acceptée ci-dessus: essayez celle-ci à la place. Confirmé pour fonctionner (également testé pour Fragments).
MrHadiSatrio

Pour une raison étrange, le mode xml ne fonctionnait pas correctement et celui-ci le fait. On dirait un bug à l'intérieur du SDK.
ar-g

Et si vous vous concentrez par programme ( editText.requestFocus()problème à l' editText.clearFocus()avance pour vous assurer que l'action souhaitée se produit dans le cas où la vue est déjà focalisée
Bad Loser

33
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});

Merci pour votre aide, mais je préfère la solution de TheCottonSilk car j'ai 12 EditText et j'aime garder mon code aussi propre que possible :) Merci quand même!
Galip

@ La solution de TheCottonSilk est la meilleure pour les widgets de conception et la réponse de Craftos est la meilleure pour les editTexts dyamiques.
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... etc ... alors editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)et ainsi de suite ...
SparK

25

Je sais que vous avez trouvé une solution, mais vraiment la bonne façon de faire ce que vous demandez est d'utiliser simplement l' android:hintattribut dans votre EditText. Ce texte apparaît lorsque la zone est vide et non focalisée, mais disparaît lors de la sélection de la zone EditText.


4
Dans mon application, ces champs sont remplis de données personnelles qui peuvent être enregistrées. Lorsque je charge ces détails, il remplace le texte «factice». Avec ma méthode Curren, je peux également avoir du texte sélectionné APRÈS les détails saisis par l'utilisateur. Merci pour vos préoccupations!
Galip

12

Géré en appelant focus et sélection sur programme

{
editabletext.requestFocus();
editabletext.selectAll();
}

11

Pourquoi n'essayez-vous pas Android: hint = "hint" pour fournir l'astuce à l'utilisateur .. !!

Le "conseil" disparaîtra automatiquement lorsque l'utilisateur cliquera sur la edittextbox. c'est la bonne et la meilleure solution.


4
Bonne réponse. Cependant, il peut y avoir des situations dans lesquelles vous remplissez EditText avec des valeurs que vous lisez à partir des paramètres, etc. et que vous souhaitez faciliter le plus possible la modification de ces valeurs :)
nuala

5

Vous pouvez également ajouter une méthode OnClick au editText après

_editText.setSelectAllOnFocus(true);

et en cela:

_editText.clearFocus();
_editText.requestFocus();

Dès que vous cliquez sur le texte d'édition, tout le texte est sélectionné.


4

SelectAllOnFocus fonctionne la première fois que EditText obtient le focus, mais si vous souhaitez sélectionner le texte à chaque fois que l'utilisateur clique dessus, vous devez appelereditText.clearFocus() entre les fois.

Par exemple, si votre application a un EditText et un bouton, cliquer sur le bouton après avoir modifié le EditText laisse le focus dans le EditText. Ensuite, l'utilisateur doit utiliser la poignée du curseur et la touche de retour arrière pour supprimer le contenu de EditText avant de pouvoir entrer une nouvelle valeur. Appelez donc editText.clearFocus()la onClickméthode du bouton .


2

J'ai essayé une réponse ci-dessus et n'ai pas fonctionné jusqu'à ce que je permute les déclarations. C'est ce qui a fonctionné pour moi:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

Je devais demander si le focus est sur le EditText, et sinon demander le focus d'abord et ensuite l'effacer. Sinon, la prochaine fois que je clique sur EditText, le clavier virtuel n'apparaîtra jamais


1

Ajoutez simplement ceci à votre editText dans le fichier .xml

android: selectAllOnFocus = "true"


0

Cela fonctionne pour moi:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.