• PopupWindow


    以前对于提示类型UI用到了PopupWindow

    通过构造函数或者setContentView(View contentView)可以设置其显示内容;

    显示时showAtLocation(View parent, int gravity, int x, int y)必须指定父视图或者showAsDropDown(View anchor, int xoff, int yoff)相对位置视图,而我们常常在广播或者什么中处理消息时,发现很可能这些视图或者他们的父视图已经被释放掉了,从而产生异常。后面讲直接调用WindowManager实现显示,就不会存在这个现象了。

    public void showAtLocation(View parent, int gravity, int x, int y) {
             showAtLocation(parent.getWindowToken(), gravity, x, y);
    }

    public void showAtLocation(IBinder token, int gravity, int x, int y) {

               .................

               WindowManager.LayoutParams p = createPopupLayout(token);
               p.windowAnimations = computeAnimationResource();
               preparePopup(p);

               ................

               invokePopup(p);

    }

    private void invokePopup(WindowManager.LayoutParams p) {
               if (mContext != null) {
                         p.packageName = mContext.getPackageName();
               }
               mPopupView.setFitsSystemWindows(mLayoutInsetDecor);
               mWindowManager.addView(mPopupView, p);
    }

    createPopupLayout负责背景处理,同时将token赋值给params的token,后期WindowManager会检查该值,但没跟踪到该值有什么作用。(求指点)

    底层是由WindowManager将视图加载进入视图管理器,下次将初步分析一下WindowManager。

  • 相关阅读:
    Postman+Newman+jenkins实现API自动化测试
    抓包,反抓包,反反抓包
    使用Magisk+riru实现全局改机
    stat命令的实现-mysate(必做)
    第五章学习笔记
    第四章学习笔记
    2.3.1测试
    缓冲区溢出
    学习笔记6
    电子公文传输系统团队项目——需求规格说明书
  • 原文地址:https://www.cnblogs.com/Empenguin/p/3373251.html
Copyright © 2020-2023  润新知