自定义PopupWindow的监听事件

解决popupwindow键盘监听事件问题

随便写一个popupwindow:

public class MyPopupWindow extends PopupWindow{
	
	private View mRootLayout;
	private OnKeyListener mOnKeyListener;
	
	public MyPopupWindow(Context context){
		LayoutInflater inflater = LayoutInflater.from(context); 
		mRootLayout = inflater.inflate(R.layout.mypopupwindow, null);//popupwindow的布局文件
		setContentView(mRootLayout);
		setWidth(LayoutParams.WRAP_CONTENT);
		setHeight(LayoutParams.WRAP_CONTENT);
		mOnKeyListener = new OnKeyListener() {
			
			@Override
			public boolean onKey(View view, int keyCode, KeyEvent event) {
				Log.d("hzb", "MediaControlerPopupWindow  --- OnKeyListener --- "+keyCode);
				
				if(keyCode == KeyEvent.KEYCODE_BACK){
					dismiss();
				}
				return true;
			}
		};
		mRootLayout.setOnKeyListener(mOnKeyListener);
		mRootLayout.setFocusable(true);
		mRootLayout.setFocusableInTouchMode(true);
		setFocusable(true);
	}
	
}

在需要弹出popupwindow的activity中主要代码:

private MyPopupWindow myPopupWindow;



myPopupWindow = new MyPopupWindow(this);

myPopupWindow.showAtLocation(findViewById(R.id.main_layout), Gravity.CENTER, 0, 0);//在activity的layout中居中显示(最外层layout的ID:main_layout)
myPopupWindow.setFocusable(true);

要两遍的setFocusable(true)才行哦!而且popupwindow最外层layout要有focusable 和 focusableIntouchMode 属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值