美文网首页
Window和WindowManager

Window和WindowManager

作者: 苏简笔记 | 来源:发表于2016-10-18 17:56 被阅读43次

    在屏幕上创建一个浮动试图

    首先实现一个功能,在屏幕上创建一个浮窗,创建一个Window,这一步只需要使用WindowManager就可以简单实现,具体步骤如下:

      WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
      WindowManager mWindowManager= (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
      //设置window 
      typewmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
      wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
      WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;    
       //半透明
      wmParams.format = PixelFormat.TRANSLUCENT;             
    
      //调整悬浮窗显示的停靠位置为左侧置顶
      wmParams.gravity = Gravity.LEFT | Gravity.TOP;
      // 以屏幕左上角为原点,设置x、y初始值,相对于
      gravitywmParams.x = 0;
      wmParams.y = 0;
    
      //设置悬浮窗口长宽数据
      wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
      wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
      //加载自定义布局
      mFloatLayout = (LinearLayout) inflater.inflate(R.layout.window_float_notification, null);
      //添加到屏幕上
      mWindowManager.addView(mFloatLayout, wmParams);
    

    以上代码就能将一个自定义的试图添加到屏幕原点了。

    重点对flag和Type两个属性做一下笔记:
    Flag参数表示Window属性。用来控制Window的显示特性

    • FLAG_NOT_FOCUSABLE
      表示window不需要获取焦点。也不需要接受各种输入事件。此标记同时会启用FLAG_NOT_TOUCH_MODAL。最终事件会传递给下层具有焦点的View.

    • FLAG_NOT_TOUCH_MODAL
      系统会将当前window区域以外的单机事件传递给底层的Window,当前区域以内的单机事件则自己处理。

    • FLAG_SHOW_WHEN_LOCKED
      开启此模式可以让window出现在锁屏上。

    Type表示Window的类型。
    Window有三种类型,分别为应用Window(1-99,注:括号内为层级范围),子Window(1000-1999)和系统Window(2000-2999)。Window是分层的,层级大的会覆盖层级小的。

    WindowManage所提供的功能很简单,添加View,更新View和删除View(这三个方法定义在ViewManager中,WindowManager继承自此类)。如果要删除WIndow只需要删除它里面的View即可。

    给浮动窗口设置拖动功能

    Paste_Image.png

    Window的内部机制

    待续~

    相关文章

      网友评论

          本文标题:Window和WindowManager

          本文链接:https://www.haomeiwen.com/subject/yvdtuttx.html