一 声明对象

    private WindowManager mWindowManager;    private WindowManager.LayoutParams mWindowLayoutParams;    private View mScreenshotLayout;


二 创建对象

        // Setup the window that we are going to use        mWindowLayoutParams = new WindowManager.LayoutParams(                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0, 0,                isRom ? WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL : WindowManager.LayoutParams.TYPE_SCREENSHOT,                WindowManager.LayoutParams.FLAG_FULLSCREEN                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED                    | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,                PixelFormat.TRANSLUCENT);        mWindowLayoutParams.setTitle("ScreenshotAnimation");        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        mScreenshotLayout = layoutInflater.inflate(R.layout.global_screenshot, null);


备注:

A  android.view.WindowManager.LayoutParams.LayoutParams(int w, int h, int xpos, int ypos, int _type, int _flags, int _format)

B  WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL 和 WindowManager.LayoutParams.TYPE_SCREENSHOT窗口级别

C 常改变的属性:

        mWindowLayoutParams.flags
        mWindowLayoutParams.privateFlags
        mWindowLayoutParams.screenOrientation
        // mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
        // mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;


三 显示窗口

mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams);


四 监听BACK/HOME按键

        mScreenshotLayout.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                switch (event.getKeyCode()) {                    case KeyEvent.KEYCODE_HOME:                        // TODO                        return true;                    case KeyEvent.KEYCODE_BACK:                        // TODO                        return true;                }                return false;            }        });        mScreenshotLayout.post(new Runnable() {            @Override            public void run() {                mScreenshotLayout.setFocusable(true);                mScreenshotLayout.setFocusableInTouchMode(true);                mScreenshotLayout.requestFocus();            }        });


注意:监听BACK/监听HOME按键时必须使得相应的View获取焦点(如上 使用post方式取得焦点),否则setOnKeyListener的onKey方法永远不会被回调,按键就监听不到!



更多相关文章

  1. android intent 传递对象需要序列化实现Parcelable接口
  2. 【Android】隐藏底部虚拟按键,亲测可用
  3. android 笔记:判断手机是否显示虚拟按键
  4. 捕获Android文本输入框的软键盘完成(Done)按键消息
  5. ListView的长按键事件的处理
  6. Android中使用Parcelable传递对象,createFromParcel中对象的赋值
  7. Activity之间传递类对象
  8. Android Bundle传递对象

随机推荐

  1. android sha1和签名证书的学习
  2. android客户端和struts框架之间的通信
  3. Android休眠设置时间设置和实现永不锁屏
  4. Android(安卓)Toast简易消息提示框的使用
  5. Android(安卓)应用程序退出的四种方法
  6. Android消息处理机制②
  7. Android动态分析工具Inspeckage
  8. iOS Airplay--Airtunes音乐播放在Android
  9. 导入Android工程提示The project was not
  10. android画图---shape的使用