2012-01-31 3 views
5

Я хочу обнаружить событие Back Key в моем CustomView (например, EditText). Во многих случаях это было достигнуто путем переопределения onKeyDown() или dispatchKeyEvent() при условии, что мой CustomView получит фокус.Как обнаружить Back Key в моем CustomView

CustomView.java

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK) { 
     ..... 
     return true; 
    }else{ 
     return super.onKeyDown(keyCode, event); 
    } 
} 

Однако, если активность включая CustomView также перекрывая onKeyDown() или dispatchKeyEvent(), он может не работать много. То есть, активность получила Back-KeyEvent перед тем, как CustomView имеет.

Я предпочитаю поймать Back-KeyEvent перед действием.

, пожалуйста, сообщите мне несколько идей об этой проблеме. Спасибо.

ответ

0

Override onKeyDown в вашей деятельности и return false. Так что событие распространяется и на другие виды.

Если вы обработали событие, верните true. Если вы хотите разрешить событию обрабатывать следующий приемник, верните значение false.

+2

Это не совсем так. Метод 'onKeyDown' в' Activity' вызывается, когда ключ был нажат и не обрабатывается каким-либо из видов внутри действия. «Сначала вызывается onKeyDown на сфокусированном представлении, затем на Activity, затем на остальном. –

+0

Но поскольку мы возвращаем false, он перейдет к следующему приемнику. Правильно? Хотя ответ @MoshErsan может быть предпочтительнее сделать это. Но, как упоминалось в вопросе, onKeyDown уже переопределен в Activity, поэтому вам нужно вернуть false там, несмотря ни на что! :) –

+2

Как вы говорите. К вашим услугам, я мог бы понять порядок, в котором вызывается метод. Фактически, когда я пытался, это было «Просмотр # onKeyPreIme», «Activity # dispatchKeyEvent», «View # dispatchKeyEvent», «View # onKeyDown», а затем, «Activity # onKeyDown». Благодаря! – Gottie

0

Вы можете попробовать использовать

setFocusableInTouchMode(true) 
setFocusable(true) 
requestFocus() 

на вашем customview

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