我們知道安卓在有軟鍵盤的時候點擊返回鍵,如果用onkeydown去攔截,那麼這次的返回鍵是被軟鍵盤的隱藏攔截掉的。那麼如果要在軟鍵盤彈出的情況下第一次返回鍵就能被我們自己攔截該怎麼做呢?
通過觀看源碼可知,view身上有個方法是dispatchKeyEventPreIme,這個方法是按鍵處理轉發到view視圖的分發方法,接着會調到onpreime, 這個方法是任何按鍵跟view關聯的最先調用的方法。
所以只要重寫控件的這兩方法的其中一個攔截event寫個回調就可以達到我們的目的。雖然重寫其中一個都可做到,但是個人覺得還是重寫onpreime比較好點,因爲dispatchKeyEventPreIme畢竟還是event分發的方法,而onpreime纔是真正處理event的方法。
附上自己代碼:
<pre name="code" class="java"><pre name="code" class="java">public class IgnoreImeEdittext extends EditText {
private OnMyKeyPreIme onMyKeyPreIme;
public IgnoreImeEdittext(Context context) {
super(context);
}
public IgnoreImeEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IgnoreImeEdittext(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if(onMyKeyPreIme!=null){
onMyKeyPreIme.disPatch(keyCode,event);
}
return super.onKeyPreIme(keyCode, event);
}
public void setOnMyKeyPreimeListener(OnMyKeyPreIme onMyKeyPreIme){
this.onMyKeyPreIme = onMyKeyPreIme;
}
public interface OnMyKeyPreIme{
public void disPatch(int keyCode, KeyEvent event);
}
}