欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Android Dialog窗口機(jī)制

 更新時(shí)間:2022年04月12日 10:46:54   作者:醬油奶茶  
本文主要介紹了Android Dialog窗口機(jī)制,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

問題引出

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

區(qū)別在構(gòu)造時(shí)候于一個(gè)傳當(dāng)前activity 一個(gè)Application。第二種方式報(bào)錯(cuò)。那么區(qū)別在哪兒呢?

Dialog 與 Activity 共用一個(gè) WindowManager 對(duì)象,所以Activity與Dialog共用同一個(gè)mAppToken值。所以在創(chuàng)建Dialog 時(shí),如果傳的Context是Application

Dialog源碼分析

構(gòu)造方法

構(gòu)造方法中有三個(gè)比較重要的函數(shù),可以自己去源碼中查看

   // 步驟1. 獲取WindowManager對(duì)象
   mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

   // 步驟2. 為Dialog創(chuàng)建新的Window
   Window w = PolicyManager.makeNewWindow(mContext);
   mWindow = w;

   // 步驟3. 關(guān)聯(lián)WindowManager與新Window
   // 注:第二個(gè)參數(shù)token為null,即一個(gè)Window屬于Dialog的話,那么該Window的傳入的mAppToken對(duì)象是null,Dialog沒有自己的token
   w.setWindowManager(mWindowManager, null, null);
  • 步驟1:因?yàn)?context 是Activity,所以獲取到的 WindowManager 屬于 Activity,所以** Dialog 與 Activity 共用一個(gè) WindowManager 對(duì)象**
  • 步驟2:獲得 Activity 的WindowManager對(duì)象后,Dialog 又新建了一個(gè) Window對(duì)象(PhoneWindow 類型,創(chuàng)建過程類似于 Activity 的 Window 創(chuàng)建過程)
  • 步驟3:將新創(chuàng)建 Dialog 的 window 關(guān)聯(lián)到 Activity 的 WindowManager。特別注意的是:關(guān)于AppToken,只是Window的傳入的mAppToken對(duì)象是null,但不代表Dialog的window無token,

所以得出結(jié)論

  • 結(jié)論1:Dialog 與 Activity 共用一個(gè) WindowManager 對(duì)象
  • 結(jié)論2:Dialog 擁有自己的窗口 Window(PhoneWindow 類型)
  • 結(jié)論3:Dialog 的 Window 由附屬的 Acitivty WindowManager 對(duì)象統(tǒng)一管理

show()方法

 // 1. 調(diào)用 Dialog的onCreate()
    dispatchOnCreate(null);

    // 2. 調(diào)用Dialog的onStart()
    onStart();

    // 3. 獲取當(dāng)前新Window的DecorView對(duì)象(類似于Activity)
    mDecor = mWindow.getDecorView();

    // 4. 獲取新Window的WindowManager.LayoutParams參數(shù)
    WindowManager.LayoutParams l = mWindow.getAttributes();

    // 5. 把一個(gè)View添加到與Activity共用的windowManager里
    mWindowManager.addView(mDecor, l);
  • Dialog獲取當(dāng)前新Window的DecorView對(duì)象時(shí)過程類似于Activity,所以有一種自定義Dialog布局的方式就是重寫Dialog的onCreate方法,使用setContentView傳入布局,類似于 Activity。
  • 步驟4:由于Dialog 與 Activity 共用一個(gè) WindowManager 對(duì)象,所以Activity與Dialog共用同一個(gè)mAppToken值(只是Dialog和Activity的Window對(duì)象不同)。
  • 步驟5:添加過程與Activity 窗口添加過程 保持一致。

到此這篇關(guān)于淺談Android Dialog窗口機(jī)制的文章就介紹到這了,更多相關(guān)Android Dialog窗口機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android基于zxing的二維碼(網(wǎng)格)掃描 仿支付寶網(wǎng)格掃描

    Android基于zxing的二維碼(網(wǎng)格)掃描 仿支付寶網(wǎng)格掃描

    這篇文章主要為大家詳細(xì)介紹了Android基于zxing的二維碼網(wǎng)格掃描,仿支付寶網(wǎng)格掃描,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android TV 焦點(diǎn)框移動(dòng)的實(shí)現(xiàn)方法

    Android TV 焦點(diǎn)框移動(dòng)的實(shí)現(xiàn)方法

    本篇文章主要介紹了Android TV 焦點(diǎn)框移動(dòng)的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • android UI繪制加減號(hào)按鈕

    android UI繪制加減號(hào)按鈕

    這篇文章主要為大家詳細(xì)介紹了android UI繪制加減號(hào)按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Android開發(fā)RecyclerView單獨(dú)刷新使用技巧

    Android開發(fā)RecyclerView單獨(dú)刷新使用技巧

    本篇文章主要是分享下RecyclerView中子item如何單獨(dú)刷新以及子item的某一部分內(nèi)容如何實(shí)現(xiàn)單獨(dú)刷新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android實(shí)現(xiàn)ViewPager無限循環(huán)效果(一)

    Android實(shí)現(xiàn)ViewPager無限循環(huán)效果(一)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ViewPager無限循環(huán)效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn)

    Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn)

    這篇文章主要介紹了Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 深入理解Android MD5數(shù)據(jù)加密

    深入理解Android MD5數(shù)據(jù)加密

    在Android中需要對(duì)各種數(shù)據(jù)進(jìn)行加密的操作,比如用戶短信備份的數(shù)據(jù)加密、用戶賬戶登陸的密碼加密以及應(yīng)用于服務(wù)器連接傳遞重要數(shù)據(jù)的加密,用處非常的多,所以今天來總結(jié)一下MD5加密算法。
    2016-09-09
  • Android 調(diào)用系統(tǒng)相冊(cè)選擇照片

    Android 調(diào)用系統(tǒng)相冊(cè)選擇照片

    這篇文章主要介紹了Android 調(diào)用系統(tǒng)相冊(cè)選擇照片的方法,幫助大家更好的進(jìn)行Android開發(fā),感興趣的朋友可以了解下
    2020-12-12
  • android自定義Camera實(shí)現(xiàn)錄像和拍照

    android自定義Camera實(shí)現(xiàn)錄像和拍照

    這篇文章主要為大家詳細(xì)介紹了android自定義Camera實(shí)現(xiàn)錄像和拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android?Flutter實(shí)現(xiàn)有趣的頁(yè)面滾動(dòng)效果

    Android?Flutter實(shí)現(xiàn)有趣的頁(yè)面滾動(dòng)效果

    Flutter提供了?CustomScrollView?來粘合多個(gè)滑動(dòng)組件,并且可以實(shí)現(xiàn)更有趣的滑動(dòng)效果,本文就來為大家詳細(xì)講講實(shí)現(xiàn)的方法,需要的可以參考一下
    2022-06-06

最新評(píng)論