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?

Galip
la source

Réponses:

517

Vous pouvez essayer dans votre main.xmlfichier:

android:selectAllOnFocus="true"

Ou, en Java, utilisez

editText.setSelectAllOnFocus(true);
TheCottonSilk
la source
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.

creftos
la source
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();
    }
});
xandy
la source
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.

Kevin Coppock
la source
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();
}
AMD
la source
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.

Vaibhav Vajani
la source
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é.

user4596287
la source
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 .

Noumenon
la source
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

RipperJugo
la source
1

Ajoutez simplement ceci à votre editText dans le fichier .xml

android: selectAllOnFocus = "true"

Julio Cesar Reis
la source
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();
            }

        }
    });
senior_russia
la source