Android Studio3.6中的View Binding初探及用法區(qū)別
參考翻譯:https://developer.android.google.cn/topic/libraries/view-binding
View Binding是一項(xiàng)功能,使您可以更輕松地編寫與視圖交互的代碼。在模塊中啟用視圖綁定后,它將為該模塊中存在的每個(gè)XML布局文件生成一個(gè)綁定類。綁定類的實(shí)例包含對在相應(yīng)布局中具有ID的所有視圖的直接引用。
在大多數(shù)情況下,視圖綁定替換findViewById。
設(shè)置說明
視圖綁定在Android Studio 3.6 Canary 11+中可用。
需要在模塊中啟用視圖綁定,請將viewBinding元素添加build.gradle文件中,如下例所示:
android { ... viewBinding { enabled = true } }
如果要在生成綁定類時(shí)忽略布局文件,則將 tools:viewBindingIgnore="true" 屬性添加到該布局文件的根視圖中
<LinearLayout ... tools:viewBindingIgnore="true" > ... </LinearLayout>
使用方法
如果為模塊啟用了視圖綁定,則將為其包含的每個(gè)XML布局文件生成一個(gè)綁定類。 每個(gè)綁定類都包含對根視圖和所有具有ID的視圖的引用。 綁定類的名稱是通過將XML文件的名稱轉(zhuǎn)換為駝峰式大小寫并將單詞“ Binding”添加到末尾來生成的。
例如,給定一個(gè)名為 result_profile.xml:
<LinearLayout ... > <TextView android:id="@+id/name" /> <ImageView android:cropToPadding="true" /> <Button android:id="@+id/button" android:background="@drawable/rounded_button" /> </LinearLayout>
生成的綁定類將稱為ResultProfileBinding。 此類有兩個(gè)字段:一個(gè)名為name的TextView和一個(gè)名為button的Button。 布局中的ImageView沒有ID,因此在綁定類中沒有對其的引用。
每個(gè)綁定類還包括一個(gè)getRoot()方法,為相應(yīng)布局文件的根視圖提供直接引用。 在此示例中,ResultProfileBinding類中的getRoot()方法返回LinearLayout根視圖。
private ResultProfileBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ResultProfileBinding.inflate(layoutInflater); setContentView(binding.root); }
綁定類的實(shí)例現(xiàn)在可以用于引用任何視圖:
binding.name.text = viewModel.name; binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });
與findViewById的區(qū)別
與使用findViewById相比,視圖綁定具有重要的優(yōu)勢:
•空安全性:由于視圖綁定會創(chuàng)建對視圖的直接引用,因此不會因無效的視圖ID而導(dǎo)致空指針異常的風(fēng)險(xiǎn)。 此外,當(dāng)視圖僅在布局的某些配置中存在時(shí),在綁定類中包含其引用的字段將用@Nullable
•類型安全性:每個(gè)綁定類中的字段具有與其在XML文件中引用的視圖匹配的類型。 這意味著沒有類強(qiáng)制轉(zhuǎn)換異常的風(fēng)險(xiǎn)。
這些差異意味著布局和代碼之間的不兼容性將導(dǎo)致編譯在編譯時(shí)而不是在運(yùn)行時(shí)失敗。
與data binding 庫的區(qū)別
視圖綁定和數(shù)據(jù)綁定庫都生成可用于直接引用視圖的綁定類。 但是,有明顯的區(qū)別:
•data binding庫僅處理使用標(biāo)記創(chuàng)建的數(shù)據(jù)綁定布局。
•view binding不支持布局變量或布局表達(dá)式,因此不能用于將布局與XML數(shù)據(jù)綁定。
到此這篇關(guān)于Android 中的View Binding初探及用法區(qū)別的文章就介紹到這了,更多相關(guān)android view binding內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Android WebSocket實(shí)現(xiàn)即時(shí)通訊功能
即時(shí)通訊(Instant Messaging)最重要的毫無疑問就是即時(shí),不能有明顯的延遲,要實(shí)現(xiàn)IM的功能其實(shí)并不難,目前有很多第三方,比如極光的JMessage,都比較容易實(shí)現(xiàn)。本文通過實(shí)例代碼給大家分享Android WebSocket實(shí)現(xiàn)即時(shí)通訊功能,一起看看吧2019-10-10Android實(shí)現(xiàn)將一個(gè)Activity設(shè)置成窗口樣式的方法
這篇文章主要介紹了Android實(shí)現(xiàn)將一個(gè)Activity設(shè)置成窗口樣式的方法,涉及Android的窗口樣式設(shè)置與布局技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-02-02Android 8.1 Launcher3實(shí)現(xiàn)動(dòng)態(tài)指針時(shí)鐘功能
這篇文章主要介紹了Android 8.1 Launcher3實(shí)現(xiàn)動(dòng)態(tài)指針時(shí)鐘功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07Android實(shí)現(xiàn)四級聯(lián)動(dòng)地址選擇器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)四級聯(lián)動(dòng)地址選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10Android實(shí)現(xiàn)圖片選擇上傳功能實(shí)例
這篇文章主要介紹了Android實(shí)現(xiàn)圖片選擇以及圖片上傳的功能,有需要的朋友跟著學(xué)習(xí)下吧。2017-12-12Android中截取當(dāng)前屏幕圖片的實(shí)例代碼
該篇文章是說明在Android手機(jī)或平板電腦中如何實(shí)現(xiàn)截取當(dāng)前屏幕的功能,并把截取的屏幕保存到SDCard中的某個(gè)目錄文件夾下面。實(shí)現(xiàn)的代碼如下:2013-08-08android實(shí)現(xiàn)RecyclerView列表單選功能
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)RecyclerView列表單選功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android編程實(shí)現(xiàn)自定義控件的方法示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義控件的方法,結(jié)合實(shí)例形式分析了Android自定義控件的布局、功能實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-06-06Android中GIF動(dòng)圖的播放控制和監(jiān)聽詳解
android下播放gif圖片功能似乎并不常用,很多時(shí)候還是以展示靜態(tài)圖片為主,可能是由于gif圖體積比較大吧。不過像表情動(dòng)畫什么的,可能還是需要gif圖的。本文主要給大家介紹了關(guān)于Android中GIF動(dòng)圖的播放控制和監(jiān)聽的相關(guān)資料,需要的朋友可以參考下。2017-05-05