2

В моей деятельности у меня есть EditText и Button. Я переопределил dispatchTouchEvent, чтобы скрыть мягкую клавиатуру, щелкнув другую область экрана, чем EditText.Как избежать dispatchTouchEvent вызывается при нажатии кнопки

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    View view = getCurrentFocus(); 
    boolean ret = super.dispatchTouchEvent(event); 

    if (view instanceof EditText) { 
     View w = getCurrentFocus(); 
     int scrcoords[] = new int[2]; 
     w.getLocationOnScreen(scrcoords); 
     float x = event.getRawX() + w.getLeft() - scrcoords[0]; 
     float y = event.getRawY() + w.getTop() - scrcoords[1]; 

     if (event.getAction() == MotionEvent.ACTION_UP 
       && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w 
         .getBottom())) { 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(getWindow().getCurrentFocus() 
        .getWindowToken(), 0); 
     } 
    } 
    return ret; 
} 

Проблема есть, каждый раз, когда я нажимаю Button, то dispatchTouchEvent будет называться, так как мягкая клавиатура исчезнет, ​​что не то, что я хочу. Я не хочу скрывать клавиатуру, когда я нажимаю Button. Я думаю, что можно избежать вызова dispatchTouchEvent, когда я нажимаю Button?

Любая обратная связь будет высоко оценена.

+0

Добавить логику для определения координат кнопки «Button»? Или, если остальная часть макета не является интерактивной, вы можете просто прикоснуться к основному макету, чтобы сделать это. – corsair992

ответ

1

Вам не нужно переопределять событие dispatchTouch. Просто установите onClickListener вашей активности на то же самое с Button и EditText, затем вызовите методы, чтобы скрыть экранную клавиатуру в случае «по умолчанию» корпуса коммутатора.

switch (v.getId()) 
    { 
     case R.id.button: 
      whateverButtonDoes(); 
      break; 
     case R.id.editText: 
      whateverEditTextDoes(); 
      break; 
     default: 
      hideKeyboard(); 
      break; 
    } 

Я настоятельно рекомендую вам определить способ скрытия клавиатуры для четких стандартов кодирования. Также вы можете использовать его в другом месте.

+0

v.getid() внутри dispatchTouchEvent идет иначе, чем R.id.button, который является моей кнопкой, можете ли вы рассказать мне, почему это происходит? –

Смежные вопросы