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

230

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

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

Galip
источник

Ответы:

517

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

android:selectAllOnFocus="true"

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

editText.setSelectAllOnFocus(true);
TheCottonSilk
источник
17
Я только что узнал, что это не работает, если в EditText xml есть тег </ requestFocus>, вставленный конструктором пользовательского интерфейса.
Machtnix
@machtnix Добавить фокус на другой компонент: stackoverflow.com/a/1662088/1020871
Любовь,
160
editText.setSelectAllOnFocus(true);

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

creftos
источник
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();
    }
});
xandy
источник
Спасибо за вашу помощь, но я предпочитаю решение 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();
}
AMD
источник
11

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

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

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

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

_editText.setSelectAllOnFocus(true);

и в этом:

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

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

user4596287
источник
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, виртуальная клавиатура никогда не появится

RipperJugo
источник
1

Просто добавьте это к своему тексту редактирования в файле .xml

андроид: selectAllOnFocus = "истина"

Хулио Сезар Рейс
источник
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();
            }

        }
    });
senior_russia
источник