要实现的仅仅是返回键使popupwindow消失。这里需要重写view的onKeyListener,这个view应该是popwindow的view,当然是最parent的那个view。
View layout = inflater.inflate(R.layout.account_dialog, (ViewGroup) activity.findViewById(R.id.account_dialog)); layout.setFocusable(true); // 这个很重要 layout.setFocusableInTouchMode(true); popupWindow = new PopupWindow(layout); popupWindow.setFocusable(true); // 重写onKeyListener layout.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { accountDialog.dismiss(); accountDialog = null; return true; } return false; } });要让生成popupwindow的那个view也是focusable的,保险起见,设置FocusableInTouchMode也为true。 这样再重写那个view的onKeyListener就行了。