我正在编写一个应用程序来设置弹出窗口的动画。它与我的代码一起工作得很好。
我想在设备上按下后退按钮时关闭弹出窗口(即向下滑动窗口)。
但是我无法从设备上听任何一个键。我使用了弹出窗口的setOnKeyListener
,我甚至没有从中获取日志。
我的代码如下:
popup_layout = layoutInflater.inflate(R.layout.popup_addchannel, null);
popupWindow = new PopupWindow(popup_layout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
subscribeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Log.d(TAG,
// "Button is clicked for animation.... Visibility is"
// + subscribeButton.getVisibility());
openMenu(view);
}
});
popup_layout.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.d(TAG, "on key button click called.........");
return false;
}
});
public void openMenu(View view) {
if (!flag) {
popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
popupWindow.showAtLocation(view.findViewById(R.id.button1),
Gravity.CENTER, 0, 0);
popupWindow.setFocusable(true);
popupWindow.update();
flag = true;
} else {
popupWindow.dismiss();
popupWindow.setFocusable(false);
flag = false;
}
}
这背后的问题是什么?
我能达到我的要求吗?
请指导我。
提前谢谢你!
答案 0 :(得分:3)
试试这个......
final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
...
popupWindow.getContentView().setFocusableInTouchMode(true);
popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU &&
event.getRepeatCount() == 0 &&
event.getAction() == KeyEvent.ACTION_DOWN) {
// ... payload action here. e.g. popupMenu.dismiss();
return true;
}
return false;
}
});
答案 1 :(得分:1)
答案 2 :(得分:0)
您应该覆盖活动的onKeyPressed()方法,如下所示。
@Override
public void onBackPressed() {
super.onBackPressed();
//your code to close the popup window.
popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
popupWindow.showAtLocation(view.findViewById(R.id.button1),
Gravity.CENTER, 0, 0);
opupWindow.setFocusable(true);
popupWindow.update();
flag = true;
}
答案 3 :(得分:0)
是的,你可以使用它 dialog_obj.setCancelable(真);
答案 4 :(得分:0)
popupWindow.getContentView().setOnClickListener(new OnClickListener()) {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popupWindow.dismiss();
}
});
试试这个。
答案 5 :(得分:0)
您无法在弹出窗口中按键按键,但是当您收听系统返回键时,您可以覆盖dismiss()
方法来拦截它。