Selecione todo o texto dentro do EditText quando ele receber o foco


230

Eu tenho um EditText com algum texto fictício nele. Quando o usuário clica nele, quero que ele seja selecionado para que, quando o usuário começar a digitar, o texto fictício seja excluído.

Como posso conseguir isso?

Respostas:


517

Você pode tentar no seu main.xmlarquivo:

android:selectAllOnFocus="true"

Ou, em Java, use

editText.setSelectAllOnFocus(true);

17
Acabei de saber que isso não funciona, se no xml EditText houver uma tag </requestFocus> inserida pelo construtor de interface do usuário.
Julio

@machtnix Adicione o foco a outro componente: stackoverflow.com/a/1662088/1020871
Amor

160
editText.setSelectAllOnFocus(true);

Isso funciona se você quiser fazer programaticamente.


2
Também para mim .. a solução acima de alguma forma não funcionou .. a programaticamente trabalhou
Martin Christmann

3
Para aqueles que ainda têm problemas com a resposta aceita acima: tente esta. Confirmado para estar funcionando (também testado Fragments).
MrHadiSatrio

Por alguma razão estranha, o xml way não funcionou adequadamente e este funcionou. Parece bug dentro do SDK.
ar-g

E se você está se concentrando programaticamente ( editText.requestFocus()problema editText.clearFocus()com antecedência para garantir ação desejada ocorre no caso em que a vista é focado
Bad Perdedor

33
EditText dummy = ... 

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

Obrigado pela ajuda, mas eu prefiro a solução de TheCottonSilk porque tenho 12 EditText e gosto de manter meu código o mais limpo possível :) Obrigado de qualquer maneira!
Galip 12/01

A solução da @ TheCottonSilk é a melhor para widgets de tempo de design e a resposta da Craftos é a melhor para os textos editáveis ​​dinâmicos.
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... etc ... então editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)e assim por diante ...
SparK 07/10

25

Eu sei que você encontrou uma solução, mas realmente a maneira correta de fazer o que você está pedindo é usar o android:hintatributo no seu EditText. Este texto aparece quando a caixa está vazia e sem foco, mas desaparece ao selecionar a caixa EditText.


4
No meu aplicativo, esses campos são preenchidos por detalhes pessoais que podem ser salvos. Quando carrego esses detalhes, ele substitui o texto 'fictício'. Com o meu método atual, também posso selecionar o texto APÓS o usuário inserir os detalhes. Obrigado por suas preocupações!
Galip

12

Gerenciado chamando o foco e a seleção no programa

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

11

Por que você não tenta android: hint = "hint" para fornecer a dica ao usuário .. !!

A "dica" desaparecerá automaticamente quando o usuário clicar na caixa de edição. é a melhor e mais adequada solução.


4
Boa resposta. No entanto, pode haver situações que povoam o EditText com valores que você lê a partir das definições etc. e você deseja torná-lo tão fácil como possível alterar esses valores :)
Nuala

5

Você também pode adicionar um método OnClick ao editText após

_editText.setSelectAllOnFocus(true);

e nisso:

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

Assim que você clicar no editText, todo o texto será selecionado.


4

SelectAllOnFocus funciona na primeira vez que o EditText obtém o foco, mas se você deseja selecionar o texto toda vez que o usuário clica nele, é necessário ligar editText.clearFocus()entre as vezes.

Por exemplo, se seu aplicativo tiver um EditText e um botão, clicar no botão após alterar o EditText deixa o foco no EditText. Em seguida, o usuário deve usar a alça do cursor e a tecla Backspace para excluir o conteúdo do EditText antes de poder inserir um novo valor. Então chame editText.clearFocus()o onClickmétodo do botão .


2

Tentei uma resposta acima e não funcionou até mudar as declarações. Isto é o que funcionou para mim:

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

Eu tive que perguntar se o foco está no EditText, e se não solicitar o foco primeiro e depois limpá-lo. Caso contrário, nas próximas vezes que eu clicar no EditText, o teclado virtual nunca aparecerá


1

Basta adicionar isso ao seu editText no arquivo .xml

android: selectAllOnFocus = "true"


0

Isso funciona para mim:

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

        }
    });
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.