editText не теряет фокус - PullRequest
       13

editText не теряет фокус

18 голосов
/ 20 декабря 2010

editText не теряет фокус в моем приложении, когда я щелкаю по нему, у него все время оранжевая рамка и курсор черной линии .. Я сделал это LinearLayout в соответствии с этим окружением editText: Остановите EditText, чтобы получить фокус при запуске Activity поэтому он не фокусируется на запуске приложения ..

это мой код:

final EditText et = (EditText)findViewById(R.id.EditText01);

final InputMethodManager imm = (InputMethodManager) getSystemService(
   INPUT_METHOD_SERVICE);

et.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
      imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
   }
});

et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
   public void onFocusChange(View v, boolean hasfocus) {
      if(hasfocus) {
         imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
      } else {
         imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
      }
   }
});

Но, похоже, он не вызывает onFocusChange, когда я щелкаю где-нибудь за пределами editText!

Ответы [ 4 ]

16 голосов
/ 14 декабря 2011

Все просто.Вы можете поместить следующее в LinearLayout или любое другое:

android:focusableInTouchMode="true"
4 голосов
/ 07 сентября 2015

Переопределить Activity.dispatchTouchEvent():

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View view = getCurrentFocus();
        if (view != null && view instanceof EditText) {
            Rect r = new Rect();
            view.getGlobalVisibleRect(r);
            int rawX = (int)ev.getRawX();
            int rawY = (int)ev.getRawY();
            if (!r.contains(rawX, rawY)) {
                view.clearFocus();
            }
        }
    }
    return super.dispatchTouchEvent(ev);
}

Таким образом, всякий раз, когда кто-то щелкает в любом месте, у вас есть контроль, и это только в одной точке кода.

1 голос
/ 14 декабря 2011

Создайте прослушиватель onClick, возможно, в вашем XML-макете, чтобы прослушивать щелчки в фоновом режиме LinearLayout.Отсюда вы можете вызвать .clearFocus() на вашем EditText после того, как сделаете его переменной экземпляра действия, в котором вы работаете.

0 голосов
/ 19 ноября 2013

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

Предположим, я установил фокус на кнопку "Назад" при нажатии кнопки "Готово", а затем вызвал метод на кнопке "Назад" внутри слушателя нажатия кнопки "Готово".

И ваша проблема решена.

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