要实现的仅仅是返回键使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就行了。
