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?

Galip
fonte

Respostas:

517

Você pode tentar no seu main.xmlarquivo:

android:selectAllOnFocus="true"

Ou, em Java, use

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

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

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

Vaibhav Vajani
fonte
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.

user4596287
fonte
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 .

Noumenon
fonte
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á

RipperJugo
fonte
1

Basta adicionar isso ao seu editText no arquivo .xml

android: selectAllOnFocus = "true"

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

        }
    });
senior_russia
fonte