1.注意自定义PopupWindow的构造函数,就行了
public MenuWindow(Context context, IMenuItemOnClickListener onClickListener) { // 继承基类的构造函数很重要,基类已经帮你实现好了Back键的监听,已经边框阴影效果 super(context); this.mContext = context; this.mItemOnClickListener = onClickListener; mInflater = LayoutInflater.from(mContext); final View view = mInflater.inflate(R.layout.menu_window, null); setContentView(view); setupViews(view); // 必须设置宽高 setWidth(LayoutParams.FILL_PARENT); setHeight(LayoutParams.WRAP_CONTENT); //====== 如果不继承PopupWindow的构造函数,可以试一下以下代码,可以实现监听Back键 // 如果设置setBackgroundDrawable,onTouch监听事件不启用, // OutsideTouchable不启用,OnKey的KEYCODEY_BACK不启用; // 如果没有设置,OutsideTouchable启用,OnTouch启用。 //setBackgroundDrawable(new BitmapDrawable()); // 必须设置,不然OnKey监听事件不启用,不响应 // view.setFocusableInTouchMode(true); // view.setOnKeyListener(mPlayListLvKeyListener); // view.setOnTouchListener(mOnTouchListener); // 必须设置,不然OnKey监听事件只能被父窗口拦截 ///////////////////////////////////////////////// setFocusable(true); // 设置PopupWindow的弹出动画 setAnimationStyle(R.style.animation_playlist_popup); }
2.另外,如果继承基类,完全可以用setTouchInterceptor监听按键事件,但要setFocusable(true);
转载请注明出处:http://www.cnblogs.com/hpboy