Zaznacz cały tekst w EditText, gdy zostanie ustawiony fokus


230

Mam EditText z jakimś fikcyjnym tekstem. Gdy użytkownik go kliknie, chcę, aby został wybrany, aby po rozpoczęciu pisania tekst fikcyjny został usunięty.

Jak mogę to osiągnąć?

Odpowiedzi:


517

Możesz spróbować w swoim main.xmlpliku:

android:selectAllOnFocus="true"

Lub w Javie użyj

editText.setSelectAllOnFocus(true);

17
Właśnie dowiedziałem się, że to nie działa, jeśli w pliku XML EditText znajduje się znacznik </requestFocus> wstawiony przez konstruktora interfejsu użytkownika.
machtnix,

@machtnix Dodaj fokus do innego komponentu: stackoverflow.com/a/1662088/1020871
Love

160
editText.setSelectAllOnFocus(true);

Działa to, jeśli chcesz to zrobić programowo.


2
Również dla mnie .. powyższe rozwiązanie jakoś nie zadziałało .. programowo działało
Martin Christmann

3
Dla tych, którzy nadal mają problemy z zaakceptowaną odpowiedzią powyżej: spróbuj tego. Potwierdzono, że działa (przetestowano również pod kątem Fragments).
MrHadiSatrio

Z jakiegoś dziwnego powodu sposób xml nie działał odpowiednio i ten działa. Wygląda na błąd w zestawie SDK.
ar-g

A jeśli są programowo skupienie ( editText.requestFocus()problem editText.clearFocus()wcześniej, aby zapewnić pożądane działanie występuje w przypadku, gdy widok jest już koncentruje
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();
    }
});

Dziękuję za twoją pomoc, ale wolę rozwiązanie TheCottonSilk, ponieważ mam 12 EditText i lubię dbać o to, aby mój kod był jak najbardziej czysty :) W każdym razie dzięki!
Galip

@ Rozwiązanie TheCottonSilk jest najlepsze do projektowania widżetów czasowych, a odpowiedź Craftos jest najlepsza do dynamicznych tekstów edycji.
Bishnu Paudel

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... etc ... wtedy editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)i tak dalej ...
SparK

25

Wiem, że znalazłeś rozwiązanie, ale naprawdę właściwym sposobem na zrobienie tego, o co prosisz, jest po prostu użycie android:hintatrybutu w tekście EditText. Ten tekst pojawia się, gdy pole jest puste i nieostre, ale znika po wybraniu pola EditText.


4
W mojej aplikacji pola te są wypełnione danymi osobowymi, które można zapisać. Kiedy załaduję te szczegóły, zastąpi tekst „obojętny”. Za pomocą mojej metody curren mogę również zaznaczać tekst PO wprowadzeniu przez użytkownika szczegółów. Dzięki za obawy!
Galip

12

Zarządzałem nim, wywołując fokus i wybór programu

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

11

Dlaczego nie spróbujesz Androida: hint = "podpowiedź", aby przekazać podpowiedź użytkownikowi .. !!

„Wskazówka” zniknie automatycznie, gdy użytkownik kliknie edittextbox. jest to właściwe i najlepsze rozwiązanie.


4
Dobra odpowiedź. Jednak mogą zdarzyć się sytuacje, że zapełnisz EditText wartościami, które odczytujesz z ustawień itp. I chcesz jak najłatwiej zmienić te wartości :)
nuala

5

Możesz także dodać metodę OnClick do editText później

_editText.setSelectAllOnFocus(true);

i w tym:

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

Po kliknięciu przycisku editText zaznaczony jest cały tekst.


4

SelectAllOnFocus działa przy pierwszym ustawieniu fokusa EditText, ale jeśli chcesz zaznaczyć tekst za każdym razem, gdy użytkownik go kliknie, musisz zadzwonić editText.clearFocus()pomiędzy nimi.

Na przykład, jeśli twoja aplikacja ma jeden EditText i jeden przycisk, kliknięcie tego przycisku po zmianie EditText pozostawia fokus w EditText. Następnie użytkownik musi użyć uchwytu kursora i klawisza Backspace, aby usunąć zawartość EditText, zanim będzie mógł wprowadzić nową wartość. Więc wywołaj metodę editText.clearFocus()przycisku onClick.


2

Próbowałem powyższej odpowiedzi i nie działałem, dopóki nie zmieniłem instrukcji. Oto, co zadziałało dla mnie:

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

Musiałem zapytać, czy fokus jest ustawiony na EditText, a jeśli nie, najpierw poproś o fokus, a następnie go wyczyść. W przeciwnym razie następnym razem, gdy kliknę na EditText, wirtualna klawiatura nigdy się nie pojawi



0

To działa dla mnie:

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

        }
    });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.