Seleziona tutto il testo all'interno di EditText quando diventa attivo


230

Ho un EditText con un testo fittizio al suo interno. Quando l'utente fa clic su di esso, voglio che sia selezionato in modo che quando l'utente inizia a digitare il testo fittizio venga eliminato.

Come posso raggiungere questo obiettivo?

Risposte:


517

Puoi provare nel tuo main.xmlfile:

android:selectAllOnFocus="true"

Oppure, in Java, utilizzare

editText.setSelectAllOnFocus(true);

17
Ho appena appreso che non funziona, se nel file XML EditText è presente un tag </requestFocus> inserito dal builder UI.
machtnix,

@machtnix Aggiungi lo stato attivo a un altro componente: stackoverflow.com/a/1662088/1020871
Amore

160
editText.setSelectAllOnFocus(true);

Funziona se vuoi farlo programmaticamente.


2
Anche per me .. la soluzione di cui sopra in qualche modo non ha funzionato .. ha funzionato programmaticamente
Martin Christmann il

3
Per coloro che hanno ancora problemi con la risposta accettata sopra: prova invece questa. Confermato di funzionare (anche testato per Fragments).
Mr HadiSatrio,

Per qualche strana ragione xml way non ha funzionato in modo appropriato e questo funziona. Sembra un bug all'interno di SDK.
ar-g,

E se stai programmando la messa a fuoco programmata ( editText.requestFocus()problema in editText.clearFocus()anticipo per garantire che l'azione desiderata si verifichi nel caso in cui la vista sia già focalizzata
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();
    }
});

Grazie per il tuo aiuto, ma preferisco la soluzione di TheCottonSilk perché ho 12 EditText e mi piace mantenere il mio codice il più pulito possibile :) Grazie comunque!
Galip,

@ La soluzione di TheCottonSilk è la migliore per i widget in fase di progettazione e la risposta di Craftos è la migliore per editTexts dinamici.
Bishnu Paudel,

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... ecc ... poi editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)e così via ...
SparK

25

So che hai trovato una soluzione, ma davvero il modo corretto di fare quello che stai chiedendo è semplicemente usare l' android:hintattributo nel tuo EditText. Questo testo viene visualizzato quando la casella è vuota e non focalizzata, ma scompare quando si seleziona la casella Modifica testo.


4
Nella mia app questi campi sono riempiti con dettagli personali che possono essere salvati. Quando caricherò quei dettagli sostituirà il testo "fittizio". Con il mio metodo curren posso anche selezionare il testo DOPO che l'utente ha inserito i dettagli. Grazie per le tue preoccupazioni!
Galip,

12

Gestito chiamando focus e selezione sul programma

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

11

Perché non provi Android: hint = "hint" per fornire il suggerimento all'utente .. !!

Il "suggerimento" scompare automaticamente quando l'utente fa clic sulla casella edittext. è la soluzione corretta e migliore.


4
Buona risposta. Tuttavia, potrebbero esserci situazioni in cui componi EditText con i valori letti dalle impostazioni, ecc. E desideri semplificare il più possibile la modifica di questi valori :)
nuala,

5

È inoltre possibile aggiungere un metodo OnClick al editText dopo

_editText.setSelectAllOnFocus(true);

e in quello:

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

Non appena si fa clic sul testo di modifica, viene selezionato l'intero testo.


4

SelectAllOnFocus funziona la prima volta che EditText viene attivato, ma se si desidera selezionare il testo ogni volta che l'utente fa clic su di esso, è necessario chiamareeditText.clearFocus() tra una .

Ad esempio, se la tua app ha un EditText e un pulsante, facendo clic sul pulsante dopo aver modificato EditText lascia il focus in EditText. Quindi l'utente deve utilizzare la maniglia del cursore e il tasto backspace per eliminare ciò che è presente nel EditText prima di poter immettere un nuovo valore. Quindi chiama editText.clearFocus()il onClickmetodo Button .


2

Ho provato una risposta sopra e non ha funzionato fino a quando non ho cambiato le dichiarazioni. Questo è ciò che ha funzionato per me:

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

Ho dovuto chiedere se lo stato attivo è su EditText e, in caso contrario, richiedere lo stato attivo, quindi deselezionarlo. Altrimenti le successive volte che ho cliccato su EditText la tastiera virtuale non comparirà mai



0

Questo funziona per me:

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

        }
    });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.