Android 中的LayoutInflater的理解

LayoutInflater與findViewById的區別?

  • 對于一個已經載入的界面,就可以使用findViewById()方法來獲得其中的界面元素。
  • 對于一個沒有被載入或者想要動態載入的界面,就需要使用LayoutInflater對象的inflate()方法來載入。
  • findViewById()是查找已被實例化為View對象的xml布局文件下的具體控件(如Button、TextView等),操作對象是一個ViewGroup或者是Activity,返回一個View對象。
  • LayoutInflater實例的inflate()方法是用來將res/layout/下的xml布局文件實例化,操作對象是XML文件,返回View對象。

LayoutInflater對象的獲取方法

  1. 調用調用Activity對象的getLayoutInflater()

    LayoutInflater inflater = getLayoutInflater();

  2. 通過Context的實例獲取

    LayoutInflater inflater = LayoutInflater.from(context);

  3. 還是通過Context的實例獲取

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

上面獲取LayoutInflater實例的方法實際上殊途同歸,都是通過調用ContextgetSystemService方法去獲取的。

先看第二種方法的實現的源碼

 public static LayoutInflater from(Context context) {LayoutInflater LayoutInflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);if (LayoutInflater == null) {throw new AssertionError("LayoutInflater not found.");}return LayoutInflater;}
復制代碼

通過源碼可以看出,第二種方法最終還是通過第三種方法實現的。

Activity 的 getLayoutInflater() 方法是調用 PhoneWindow 的getLayoutInflater()方法,源碼如下:

public PhoneWindow(Context context) {super(context);mLayoutInflater = LayoutInflater.from(context);}public LayoutInflater getLayoutInflater() {return mLayoutInflater;}
復制代碼

所以可以看出,上述三種方式最終本質是都是調用的Context實例的getSystemService()

inflate()方法

通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,返回值均是 View 對象:

  • public View inflate (int resource, ViewGroup root)

    resource:View的layout的ID
    root:如果為null,則將此View作為一個獨立的View存在
    如果!null, 那么該View會被直接addView進父View,然后將父View返回。

  • public View inflate (XmlPullParser parser, ViewGroup root)

    parser:你需要解析xml的解析接口
    root:如果為null,則將此View作為一個獨立的View存在
    那么該View會被直接addView進父View,然后將父View返回。

  • public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)

    parser:你需要解析View的xml的解析接口。
    如果root為Null,attachToRoot參數無效,而解析出的View作為一個獨立的View存在。
    如果 root不為Null,attachToRoot設為true,那么該View會被直接addView進父View,然后將父View返回。
    如果root不為Null,attachToRoot為false,那么會給該View設置一個父View的約束(LayoutParams),然后將其返回。
    當root不為null的話,attactToRoot的默認值是true。

  • public View inflate (int resource, ViewGroup root, boolean attachToRoot)

    resource:View的layout的ID
    如果root為Null,attachToRoot參數無效,而解析出的View作為一個獨立的View存在。
    如果 root不為Null,attachToRoot設為true,那么該View會被直接addView進父View,然后將父View返回。
    如果root不為Null,attachToRoot為false,那么會給該View設置一個父View的約束(LayoutParams),然后將其返回。
    當root不為null的話,attactToRoot的默認值是true。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux rootfs編譯進內核,九鼎x6818開發板筆記:uboot、kernel、rootfs編譯和燒寫

下面記錄了如何搭建嵌入開發環境,如何編譯uboot、kernel、和文件系統,如何燒寫鏡像以及如何配置uboot環境變量。閱讀注意:記錄中(Base框中的內容)一些操作故意被添加,為了展示文件內容,故意調用cat(Ubuntu)或者type(wi…

figma下載_素描vs Figma困境

figma下載I distinctly remember how much hatred I had in my heart when I lived through my first UI update. The year was 2009; I had just gotten my braces off and I was ready to smash that ‘Like’ button on my high school crush’s status when I logged into …

祝大家七夕快樂,邀你源碼共讀,順帶發點紅包

大家好,我是若川。這是一個普通的周六。只不過又叫七夕節,祝大家七夕節快樂~所以就不更新技術文了。估計還是有很多讀者不知道我。若川名字由來是取自:上善若水,海納百川。順便放兩篇文章。我讀源碼的經歷,跟各位讀者朋…

windows 系統監視器 以及建議閥值

windows 系統監視器 以及建議閥值 計數器的說明可以在添加計數器那邊 資源 對象\計數器建議的閾值注釋磁盤Physical Disk\% Free SpaceLogical Disk\% Free Space15%磁盤Physical Disk\% Disk Time Logical Disk\% Disk Time90%磁盤Physical Disk\Disk Reads/sec、Physical Dis…

前端人員如何在linux服務器上搭建npm私有庫

為什么要搭建npm私有庫? 為了方便下載時,公共包走npmjs,私有包走內部服務器。npm包下載的速度較慢,搭建npm私有庫之后,會先操作私有庫中是否有緩存,有緩存直接走緩存,而不用重新再去請求一遍網絡。哪種方式…

硬幣 假硬幣 天平_小東西叫硬幣

硬幣 假硬幣 天平During the last 1,5 years, I’ve been traveling a lot. Apart from my must-have things like laptop, sketchbook, and power bank, there constantly appears a new one, in a familiar shape but a new look. That’s 在過去的1.5年中,我經常…

Linux創建一個用戶時分配組,useradd和groupadd(Linux創建用戶\用戶組\設置\分配用戶權限)的使用...

前言:man useradd    man groupadd    info useradd    info groupadd 都可以獲取相關命令的用法信息。個人比較喜歡讀英文解釋文檔,沒有你想象的那么complicated!😜USERADD(8) System Management Commands USERADD…

尤雨溪發布的Vue 3.2 有哪些新變化?

大家好,我是若川。今天分享一篇 Vue 3.2 版本的文章。查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列1前言8.10號凌晨,尤雨溪在微博平臺官宣 Vue 3.2 版本正式發布:此版本包含一系列重要的新功能與性能改進,但并…

對象的清除

調用System.gc() 請求垃圾回收的最簡單的方法,但是注意——只是請求,在調用System.gc()之后,有可能會釋放出更多的內存空間。轉載于:https://www.cnblogs.com/happykakeru/archive/2011/04/09/2010030.html

https://zeplin.io/ 設計圖標注及切圖

2019獨角獸企業重金招聘Python工程師標準>>> https://zeplin.io/ 轉載于:https://my.oschina.net/soho00147/blog/3025646

更好的設計接口_設計可以而且必須做得更好

更好的設計接口We live in a world that becomes more dependent on technology every day. Tech gives us new ways to communicate, learn, work, and play, and recently it enabled us to reveal the appalling police brutality towards black people in the US by sharin…

linux隱寫文件剝離,雜項的基本解題思路(1)——文件操作隱寫、圖片隱寫

文件操作隱寫圖片隱寫壓縮文件處理流量取證技術文章本來是分成4部分的,但是前兩部分何在一起寫了也就沒有分開,所以干脆就只分了兩部分文件基本類型的識別一、kail 下file 文件名原理就是識別文件文件頭比如這個軟件:二、WinHex通過winhex分析…

賬務管理系統

2011-04-11 21:55最近寫了一個賬務管理系統(個人版)使用C#語言編寫,編譯器VS2010,數據庫Access2010,系統采用三層架構,界面可以換膚, 窗體按鈕可以移動,可以自定義皮膚,保…

初學者也能看懂的 Vue3 源碼中那些實用的基礎工具函數

1. 前言大家好,我是若川。最近組織了源碼共讀活動。每周讀 200 行左右的源碼。很多第一次讀源碼的小伙伴都感覺很有收獲,感興趣可以加我微信ruochuan12,拉你進群學習。寫相對很難的源碼,耗費了自己的時間和精力,也沒收…

Flutter RichText支持自定義文字背景

extended text 相關文章 Flutter RichText支持圖片顯示和自定義圖片效果Flutter RichText支持自定義文本溢出效果Flutter RichText支持自定義文字背景Flutter RichText支持特殊文字效果之前介紹過了Extended text,老規矩上圖 UI設計說,那個字可以加個卟呤…

細說 Vue.js 3.2 關于響應式部分的優化

大家好,我是若川。上一篇寫的是:初學者也能看懂的 Vue3 源碼中那些實用的基礎工具函數。今天再分享一篇 Vue 3.2 的文章。學習源碼整體架構系列、年度總結、JS基礎系列背景Vue 3 正式發布距今已經快一年了,相信很多小伙伴已經在生產環境用上了…

linux 運行apj,pxe+ris-linux實現在DELL R710上網絡安裝windows2003

一、前言網絡遠程安裝windows2003,目前有兩種方法:一就是通過windows自帶的遠程安裝服務(RIS,Remote Installation Service),但這種方法需要用windows做為源服務器,需要安裝域控制器,dhcp,tftp等…

Debian Security Advisory(Debian安全報告) DSA-4411-1 firefox-esr security update

Debian Security Advisory(Debian安全報告) DSA-4411-1 firefox-esr security update Package :firefox-esr CVE ID: CVE-2018-18506 CVE-2019-9788 CVE-2019-9790 CVE-2019-9791 CVE-2019-9792 CVE-2019-9793 CVE-2019-9795 CVE-2019-9796 CVE…

Entity framework WhereInExtension

摘自 http://www.cnblogs.com/ejiyuan/archive/2009/07/20/1527224.html publicstaticclassWhereInExtension {privatestaticExpression<Func<TElement, bool>>BuildWhereInExpression<TElement, TValue>(Expression<Func<TElement, TValue>>pro…

寫給初中級前端的高級進階指南

大家好&#xff0c;我是若川。最近組織了源碼共讀活動。每周讀 200 行左右的源碼。很多第一次讀源碼的小伙伴都感覺很有收獲&#xff0c;感興趣可以加我微信ruochuan12&#xff0c;拉你進群學習。前言我曾經一度很迷茫&#xff0c;在學了 Vue、React 的實戰開發和應用以后&…