PopuWindow全屏狀態下響應返回鍵

最近項目較忙,沒有時間去看書與寫博客。這裏分享下在項目中遇到的一引起典型的例子吧。
前面寫了一篇防小米的自定義時間控件,也是在項目中遇到。上下效果圖。這裏使用popupWindow彈出控制,變灰的部分是popuwindow的背景。這裏會遇到一個問題,在沒點過確定時,返回鍵會失效。
這是爲什麼呢? 通過查閱,原因是這樣, 全屏狀態上popuwindw搶佔了activity的焦點,而返回鍵是屬於Activity的事件。所以無法被響應。
這裏給出解決方案就是要想辦法讓popuwindow的控件去響應返回鍵,通常選擇根佈局。
1.該 Layout 的 Focusable 和 FocusableInTouchMode 都爲 true。
2. 對該 View 重寫 OnKeyListener() 事件。

下面給出彈出popuwindow的代碼

/**
 * 彈出時間選擇對話框
*/
private void showDateDialog() {
    View view = this.getLayoutInflater().inflate(R.layout.dialog_datetimepicker, null);
if (popupWindow == null) {
popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, true);
popupWindow.showAtLocation(view, Gravity.CENTER
| Gravity.CENTER, 0, 0);
popupWindow.setAnimationStyle(R.style.dialogAnimation);
ColorDrawable dw = new ColorDrawable(0x000000);
popupWindow.setBackgroundDrawable(dw);
popupWindow.update();
        view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && (popupWindow.isShowing())) {
popupWindow.dismiss();
return true;
                }
return true;
            }
        });

popupWindow.setFocusable(true);
        Button saveBtn = (Button) view.findViewById(R.id.saveBtn);
        saveBtn.setOnClickListener(this);
datePicker = (MyDatePicker) view.findViewById(R.id.datePicker);
    } else {
if (!popupWindow.isShowing()) {
popupWindow.showAtLocation(view, Gravity.RIGHT | Gravity.BOTTOM, 0, 0);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章