Виділіть увесь текст всередині EditText, коли він фокусується


230

У мене є EditText з деяким фіктивним текстом. Коли користувач натискає на нього, я хочу, щоб його було вибрано так, що коли користувач починає вводити текст манекена, видаляється.

Як я можу цього досягти?

Відповіді:


517

Ви можете спробувати у своєму main.xmlфайлі:

android:selectAllOnFocus="true"

Або в Java використовувати

editText.setSelectAllOnFocus(true);

17
Я щойно дізнався, що це не працює, якщо в xml EditText є тег </requestFocus>, вставлений конструктором інтерфейсу користувача.
machtnix

@machtnix Додати фокус до іншого компонента: stackoverflow.com/a/1662088/1020871
Love

160
editText.setSelectAllOnFocus(true);

Це працює, якщо ви хочете це робити програмно.


2
Також для мене .. вищевказане рішення якось не спрацювало .. програмно працював
Мартін Крістманн

3
Для тих, хто все ще має проблеми з прийнятою відповіддю вище: спробуйте цю. Підтверджено, що працює (також перевірено на Fragments).
MrHadiSatrio

З якоїсь дивної причини xml спосіб не працював належним чином, і це зробити. Схоже, помилка всередині SDK.
ар-г

А якщо ви зосереджені на програмі ( заздалегідь поставте editText.requestFocus()питання, editText.clearFocus()щоб переконатися, що потрібна дія відбувається у випадку, коли погляд уже зосереджений
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();
    }
});

Дякую за вашу допомогу, але я віддаю перевагу рішення TheCottonSilk, оскільки у мене є 12 EditText, і я люблю підтримувати свій код максимально чистим :) Завдяки все-таки!
Галіп

@ Рішення TheCottonSilk найкраще для віджетів часу на розробку, а відповідь Craftos найкраще для динамічних editTexts.
Бішну Паудель

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... тощо ... потім editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)і так далі ...
SparK

25

Я знаю, що ви знайшли рішення, але насправді правильним способом зробити те, що ви просите, є просто використовувати android:hintатрибут у вашому EditText. Цей текст з’являється, коли поле порожнє та не зосереджене, але зникає при виборі поля EditText.


4
У моєму додатку ці поля заповнюються особистими даними, які можна зберегти. Коли я завантажу ці дані, він замінить текст "манекен". За допомогою мого методу curren я також можу обрати текст ПІСЛЯ користувачеві введені реквізити. Дякую за турботи!
Галіп

12

Керував ним, викликаючи фокус та вибір програми

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

11

Чому б не спробувати android: hint = "hint", щоб надати підказку користувачеві .. !!

"Підказка" автоматично зникне, коли користувач натисне на поле редагування. це правильне і найкраще рішення.


4
Хороша відповідь. Однак можуть виникнути ситуації , ви населяють EditText зі значеннями ви лічених з налаштувань і т.д. , і ви хочете , щоб зробити його якомога простіше , щоб змінити ці значення :)
Nuala

5

Ви також можете додати метод OnClick до editText після

_editText.setSelectAllOnFocus(true);

і в цьому:

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

Щойно ви натискаєте на редагуванняТексту, вибирається весь текст.


4

SelectAllOnFocus працює вперше, коли редактор редагує фокус, але якщо ви бажаєте вибирати текст щоразу, коли користувач натискає на нього, вам потрібно зателефонуватиeditText.clearFocus() між часом.

Наприклад, якщо у вашому додатку є один EditText та одна кнопка, натискання кнопки після зміни EditText залишає фокус у EditText. Потім користувач повинен використовувати ручку курсору та клавішу зворотної області, щоб видалити те, що знаходиться в EditText, перш ніж вони зможуть ввести нове значення. Тож дзвонітьeditText.clearFocus() в onClickметод Кнопка .


2

Я спробував вищевказану відповідь і не спрацював, поки не переключив твердження. Це для мене працювало:

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

Мені довелося запитати, чи фокус є на EditText, а якщо не спочатку запитувати фокус, а потім очистити його. Інакше наступного разу, коли я натиснув на EditText, віртуальна клавіатура ніколи не з’явиться



0

Це для мене працює:

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

        }
    });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.