Сделать EditText потерять фокус при нажатии кнопки

У меня есть два поля EditText в моей деятельности и сделано button. Я хочу, чтобы поля EditText потеряли фокус (то есть, курсор не должен отображаться ни на одном из них), когда пользователь нажимает кнопку. Я использую следующий код:

final Button saveButton = (Button) findViewById(R.id.saveButton);
    saveButton.setOnClickListener(saveButtonListener);

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
                Text1.clearFocus();
                Text2.clearFocus();

    }

}

Однако, когда я нажимаю кнопку "Готово", курсор появляется на Text1, даже если я еще не нажал ни на один EditText. Как я могу сделать поля EditText свободным фокусом на щелчке кнопки

Ответ 1

попробуйте изменить код:

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
                Text1.clearFocus();
                Text2.clearFocus();
                saveButton.requestFocus(); //or any other View
    }

}

потому что как doc как public void clearFocus():

Вызывается, когда это представление хочет отказаться от фокуса. Если фокус очищен onFocusChanged (boolean, int, android.graphics.Rect).

Примечание.. Когда представление очищает фокус, структура пытается дать фокус к первому фокусируемому Вид сверху. Следовательно, если этот вид является сначала с вершины, которая может сфокусироваться, тогда все обратные вызовы, связанные с выравнивание фокуса будет вызвано после того, как структура предоставит сфокусируйтесь на этом взгляде.

означает, что вы должны установить Focus на другое изображение при нажатии кнопки, потому что Text1 действует как первый вид в вашем макете

Ответ 2

вы можете попробовать этот код, просто переместите фокус в другое представление.

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        saveButton.requestFocus(); //any other View
    }

}

Ответ 3

Лучший способ найти -

private void listenToButton(){
    someButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            v.requestFocusFromTouch();
            //Proceed with things
        }
    }
}

Ответ 4

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

@Override
public void onClick(View v) {

     //To hide soft keyboard          
   InputMethodManager im = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
   im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

   v.requestFocusFromTouch();

}

Ответ 5

Установите эти строки для этой кнопки, чтобы сделать трюк.

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        v.requestFocus();
        ......
    }
};
button.setOnClickListener(showUserListViewListener);

Работает для меня:)

Ответ 6

Вы можете просто создать пустой скрытый элемент EditText в вашем макете. Что-то с 0 шириной и 0 высотой. Затем в вашем клике вы можете позвонить hiddenEditText.requestFocus();

Ответ 7

Используйте следующий код при нажатии кнопки: -

InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);