Выделите весь текст внутри EditText, когда он получит фокус - PullRequest
212 голосов
/ 12 января 2011

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

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

Ответы [ 10 ]

484 голосов
/ 12 января 2011

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

android:selectAllOnFocus="true"
152 голосов
/ 14 сентября 2012
editText.setSelectAllOnFocus(true);

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

32 голосов
/ 12 января 2011
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});
25 голосов
/ 12 января 2011

Я знаю, что вы нашли решение, но на самом деле правильный способ сделать то, что вы просите, - это просто использовать атрибут android:hint в вашем EditText. Этот текст отображается, когда поле пустое и не сфокусировано, но исчезает при выборе поля EditText.

11 голосов
/ 19 января 2016

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

{
editabletext.requestFocus();
editabletext.selectAll();
}
11 голосов
/ 31 января 2012

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

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

4 голосов
/ 23 февраля 2015

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

_editText.setSelectAllOnFocus(true);

и в том:

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

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

4 голосов
/ 22 июля 2013

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

Например, если ваше приложение имеет один EditText и одну кнопку, нажатие кнопки после изменения EditText оставляет фокус в EditText. Затем пользователь должен использовать дескриптор курсора и клавишу возврата, чтобы удалить то, что находится в EditText, прежде чем он сможет ввести новое значение. Поэтому вызовите editText.clearFocus() в методе Button onClick.

2 голосов
/ 24 июля 2018

Я попробовал вышеуказанный ответ и не работал, пока я не переключил утверждения. Вот что у меня сработало:

    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 голосов
/ 10 марта 2019

Это работает для меня:

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

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...