如何通过PolicyManager创建一个新的Window
2013-04-28 16:36
302 查看
当程序员去创建一个新的window的时候,发现new的时候右好多方法未实现,在android中有这样一个类可以生成一个新的window,但是由于该类被android设置为@hide类型的类,所以程序员无法使用。但是程序员总是有办法的,通过java的反射机制就可以访问到该类,并且调用到生成window的方法。贴上代码如下:
该window拦截所有的keyevent以及 touchevent将在callback中提现出来。
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中提现出来。
相关文章推荐
- Android中如何通过强制设备管理策略创建一个安全敏感的应用程序
- 如何通过创建一个Fraction类(分数)来实现分数的加减乘除,比较大小、约分等方法(方法的实现部分)
- 如何通过使用 ADOX 和 VisualBasic.NET 创建一个 MicrosoftAccess 数据库
- 如何通过Sqlplus创建一个oracle的user
- 通过反射动态创建了一个控件,如何再用发射通过该控件的名字得到该控件呢?
- 【原】Linux 中如何通过命令创建文件——如何创建一个空文件
- Linux有问必答:如何通过命令行创建和设置一个MySQL用户
- Flex中如何通过设置editable属性创建一个可编辑的DataGrid控件的例子
- 在liunx中创建启动器(window下的快捷方式) && linux下,如何建立一个“关闭屏幕”的启动器 ?
- Linux有问必答:如何通过命令行创建和设置一个MySQL用户
- 如何通过命令行创建和设置一个MySQL用户
- Ext通过按钮创建一个Window实例代码
- 如何通过命令行创建和设置一个MySQL用户
- 如何通过命令行创建和设置一个MySQL用户
- HOWTO:如何通过脚本创建一个文件夹的快捷方式
- 如何通过表单创建一个Word?
- Spring的如何通过bean创建一个对象,并赋值。
- Flex中如何通过strokeWidth, strokeColor和shadowColor样式,创建一个自定义风格的HRule或VRule
- 如何在Java中创建一个矩形类,并通过set()传入长与宽,计算矩形的周长与面积并通过get()查看计算结果
- 如何:通过导航控件创建一个新的对象