Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android Dialog窗口机制

浅谈Android Dialog窗口机制

作者:酱油奶茶

本文主要介绍了Android Dialog窗口机制,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

问题引出

//创建dialog 方式一
 AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
  // 创建dialog 方式二
 AlertDialog.Builderbuilder=new AlertDialog.Builder(getApplicationContex());

区别在构造时候于一个传当前activity 一个Application。第二种方式报错。那么区别在哪儿呢?

Dialog 与 Activity 共用一个 WindowManager 对象,所以Activity与Dialog共用同一个mAppToken值。所以在创建Dialog 时,如果传的Context是Application

Dialog源码分析

构造方法

构造方法中有三个比较重要的函数,可以自己去源码中查看

   // 步骤1. 获取WindowManager对象
   mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

   // 步骤2. 为Dialog创建新的Window
   Window w = PolicyManager.makeNewWindow(mContext);
   mWindow = w;

   // 步骤3. 关联WindowManager与新Window
   // 注:第二个参数token为null,即一个Window属于Dialog的话,那么该Window的传入的mAppToken对象是null,Dialog没有自己的token
   w.setWindowManager(mWindowManager, null, null);

所以得出结论

show()方法

 // 1. 调用 Dialog的onCreate()
    dispatchOnCreate(null);

    // 2. 调用Dialog的onStart()
    onStart();

    // 3. 获取当前新Window的DecorView对象(类似于Activity)
    mDecor = mWindow.getDecorView();

    // 4. 获取新Window的WindowManager.LayoutParams参数
    WindowManager.LayoutParams l = mWindow.getAttributes();

    // 5. 把一个View添加到与Activity共用的windowManager里
    mWindowManager.addView(mDecor, l);

到此这篇关于浅谈Android Dialog窗口机制的文章就介绍到这了,更多相关Android Dialog窗口机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文