如何通过PolicyManager创建一个新的Window

当程序员去创建一个新的window的时候,发现new的时候右好多方法未实现,在android中有这样一个类可以生成一个新的window,但是由于该类被android设置为@hide类型的类,所以程序员无法使用。但是程序员总是有办法的,通过java的反射机制就可以访问到该类,并且调用到生成window的方法。贴上代码如下:

public void createWindow(){
		try {
			// 创建新的window
			Class PolicyManagerClass = Class.forName("com.android.internal.policy.PolicyManager");
			Method method = PolicyManagerClass.getMethod("makeNewWindow", Context.class);
			mWindow = (Window)method.invoke(null, mContext);
			
			// 设置window的callback,在这里将处理touch,keyevent等等
			mWindow.setCallback(this);
			mWindow.setContentView(mShortCut);
			
			// 将window与windowmanager绑定在一起
			mWindow.setWindowManager(mWindowManager, null, null);
			
			mParams.gravity = Gravity.LEFT | Gravity.TOP;
			mParams.type = LayoutParams.TYPE_PHONE;
			mParams.width = LayoutParams.MATCH_PARENT;
			mParams.height = LayoutParams.MATCH_PARENT;
			
			// 让view在界面中显示
			mWindowManager.addView(mWindow.getDecorView(), mParams);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
	}


该window拦截所有的keyevent以及 touchevent将在callback中提现出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值