Выделите весь текст внутри EditText, когда он получит фокус


230

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

Как мне этого добиться?

Ответы:


517

Вы можете попробовать в своем main.xmlфайле:

android:selectAllOnFocus="true"

Или, на Java, используйте

editText.setSelectAllOnFocus(true);

17
Я только что узнал, что это не работает, если в EditText xml есть тег </ requestFocus>, вставленный конструктором пользовательского интерфейса.
Machtnix

@machtnix Добавить фокус на другой компонент: stackoverflow.com/a/1662088/1020871
Любовь,

160
editText.setSelectAllOnFocus(true);

Это работает, если вы хотите сделать это программно.


2
Также для меня .. вышеупомянутое решение как-то не сработало .. программно сработало
Martin Christmann

3
Для тех, у кого все еще есть проблемы с принятым ответом выше: попробуйте этот. Подтверждено, что работает (также проверено на Fragments).
MrHadiSatrio

По какой-то странной причине способ XML не работает должным образом, и этот работает. Похоже, ошибка внутри SDK.
ар-г

И если вы программно фокусировки ( editText.requestFocus()вопрос editText.clearFocus()заранее , чтобы обеспечить желаемое действие происходит в том случае , когда точка зрения уже сосредоточены
неудачник

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
В моем приложении эти поля заполнены личными данными, которые могут быть сохранены. Когда я загружу эти детали, он заменит «фиктивный» текст. Используя мой текущий метод, я также могу выбрать текст ПОСЛЕ ввода введенных пользователем данных. Спасибо за ваши проблемы, хотя!
Галип

12

Управлял этим путем вызова фокуса и выбора программы

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

11

Почему бы вам не попробовать Android: hint = "подсказка", чтобы предоставить подсказку для пользователя .. !!

«Подсказка» автоматически исчезнет, ​​когда пользователь нажмет на текстовое поле редактирования. это правильное и лучшее решение.


4
Хороший ответ. Однако могут быть ситуации, когда вы заполняете EditText значениями, которые вы читаете из настроек и т. Д., И вы хотите максимально легко изменить эти значения :)
nuala

5

Вы также можете добавить метод OnClick в editText после

_editText.setSelectAllOnFocus(true);

и в этом:

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

Как только вы нажмете editText, весь текст будет выделен.


4

SelectAllOnFocus работает в первый раз, когда EditText получает фокус, но если вы хотите выделять текст каждый раз, когда пользователь нажимает на него, вам нужно позвонить 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.