美文网首页Android OS
系统窗口创建过程

系统窗口创建过程

作者: 古风子 | 来源:发表于2019-01-11 17:12 被阅读0次

客户端通过以下方式添加系统窗口

TextView textView = LayoutInflater.from(MainActivity.this).inflate(R.layout.window_view, null);
  TextView edit = (TextView) textView.findViewById(R.id.passwordEntry);
  edit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
  
  WindowManager.LayoutParams mLp = new WindowManager.LayoutParams();
  mLp.type = WindowManager.LayoutParams.TYPE_TOAST;
  mLp.width = WindowManager.LayoutParams.MATCH_PARENT;
  mLp.height = WindowManager.LayoutParams.MATCH_PARENT;
  mLp.flags = WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
  | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
  | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
  mLp.format = PixelFormat.TRANSLUCENT;
  mLp.gravity = Gravity.BOTTOM;
  mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
  ((WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE)).addView(textView, mLp);

之后系统的调用流程如下:

windows.png

WindowManagerServices$addWindow

    public int addWindow(Session session, IWindow client, int seq,
            WindowManager.LayoutParams attrs, int viewVisibility, int displayId,
            Rect outContentInsets, Rect outStableInsets, Rect outOutsets,
            InputChannel outInputChannel) {
       // OP_TOAST_WINDOW
       if (win.mAppOp != AppOpsManager.OP_NONE) {
       //在这里进行直接拦截,如果是要拦截的toast,设置改window不可见
       if (WmInjector.isAdToastApp(attrs)) {
           win.setAppOpVisibilityLw(false);
       } else {
          int startOpResult = mAppOps.startOpNoThrow(win.mAppOp, win.getOwningUid(),
               win.getOwningPackage());
           if ((startOpResult != AppOpsManager.MODE_ALLOWED) &&
                (startOpResult != AppOpsManager.MODE_DEFAULT)) {
                win.setAppOpVisibilityLw(false);
           }
       }
        return res;
    }

相关文章

  • 系统窗口创建过程

    客户端通过以下方式添加系统窗口 之后系统的调用流程如下: WindowManagerServices$addWindow

  • 系统窗口Toast创建过程

    1.系统窗户的含义 因为在Wms调用addWindow()添加窗口时,会调用WindowManagerPolicy...

  • Android创建窗口(二)创建Dialog

    在Android创建窗口(一)创建应用窗口中介绍了应用窗口的创建过程,本文将介绍一下Dialog的创建过程。创建D...

  • 新建一个窗口程序

    新建一个窗口程序 消息机制 创建窗口的几个步骤 创建窗口类 注册窗口类 创建窗口 显示窗口 构建消息循环 创建过程...

  • 创建窗口的过程

    导语 从Wms角度来看,一个窗口并不是Window类,而是一个View类。Wms收到用户的消息之后,需要把消息派发...

  • 创建应用窗口过程

    1.每个窗口都对应一个Activity对象,所以创建应用窗口首先是创建Activity.而启动Activity的任...

  • Android 输入法窗口焦点获取流程(1),窗口和Sessio

    基于Android9.x 目录 窗口创建和WindowSession创建 窗口创建 attatch 该过程主要是完...

  • 2018-07-27 day-10

    1.在创建的窗口内创建文字并显示 创建窗口 其中(600,400)位窗口大小 创建字体对象(找一只笔) 创建系统字...

  • 启动优化

    一、启动分析 1、启动过程分析 T1预览窗口显示,系统启动应用之前,会根据应用的Theme属性创建预览窗口,当我们...

  • Android创建窗口的过程

    Window 、 WindowManager 和 WMS Window Window,一个抽象类,具体的实现类为P...

网友评论

    本文标题:系统窗口创建过程

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