日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解

瀏覽:135日期:2022-09-26 16:29:50

前言

我們在Android開發的過程中總是需要獲取XML布局中的ViewId,以便給其賦值進行顯示,早期我們只能使用 findViewById 這個API,會導致很多的模版代碼出現。2013年左右Android界大神 Jake Wharton開源了Butter Knife框架,通過Bind('viewid')方式方便開發者獲取ViewId。近兩年由于谷歌對Kotlin的支持,我們開始使用 Android Kotlin extensions。 在文件中導入布局文件直接引用viewId。無需做其他額外操作,最為方便。

目前,谷歌在 Android Studio 3.6 Canary 11 及更高版本中加入了新的視圖綁定工具 ViewBinding。

下面我們一起看下具體使用。

ViewBinding的使用

我們現在開發很多項目都是使用模塊化來進行開發的。ViewBinding也是很機智的可以按照模塊來啟用。如果要在某個模塊中啟用ViewBinding,則需要在模塊的build.gradle中添加如下配置即可:

android { ... viewBinding { enabled = true }}

如果在使用的過程中開發者不想為某個布局文件生成binding類,則可以使用如下屬性添加到布局的根視圖中即可:

<LinearLayout ... tools:viewBindingIgnore='true' > ...</LinearLayout>

當模塊開啟視圖綁定功能后,系統會為該模塊中的每一個XML文件生成對應的綁定類。每一個綁定類均包含對根視圖以及定義了ID的所有視圖的引用。

綁定類的名稱生成規則是將XML文件的名稱按照駝峰命名規則加上Binding進行結尾。

比如我們的 activity_main.xml文件。

<LinearLayout ... > <TextView android: /> <ImageView android:cropToPadding='true' /> <Button android: android:background='@drawable/rounded_button' /></LinearLayout>

那么生產的綁定類名稱為 ActivityMainBinding。此類具有兩個字段:一個是名為 name 的 TextView,另一個是名為 button 的 Button。該布局中的 ImageView 沒有 ID,因此綁定類中不存在對它的引用。

每個綁定類還包含一個 getRoot() 方法,提供為布局文件的根視圖的直接引用。在此示例中,ActivityMainBinding 類中的 getRoot() 方法會返回 LinearLayout 根視圖。

自動生成的綁定類也并不復雜,主要就是兩個inflate重載方法以及一個bind方法。我們獲取的對viewId引用就是在bind方法中進行的,內部其實也是通過findViewById來獲取相關view的。

我們通常設置布局文件是通過setContentView('layoutId'),但是使用了ViewBinding后我們需要按照如下方式進行設置layout:

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) //獲取name進行賦值 binding.name.text = 'viewBinding' }}

這樣就可以直接使用了。是不是很簡單呢。

但是需要注意的是,如果我們的布局文件分為 layout和layout-land,我們我們在定義布局的時候可能會存在不同的viewId,如果是使用findViewById 或者 Butter Knife 那么肯定就異常了。

我們在使用 ViewBinding 的時候,綁定類貼心的為我們做了相關的判斷。通過 @Nullable 和 @NonNull 兩個注解來告訴開發者,哪些view可能為空。并在可能為空的view上添加了相關的注視說明。

/** * This binding is not available in all configurations. * <p> * Present: * <ul> * <li>layout/</li> * </ul> * * Absent: * <ul> * <li>layout-land/</li> * </ul> */ @Nullable public final TextView mAppTv;

提醒開發者在使用的時候注意異常的處理。

總結

目前 ViewBinding 的功能還不夠完善,比如XML中使用了 inClude 標簽時無法對view進行引用。但總體來說已經很不錯了。相比較于 findViewById 和 Butter Knife兩種方式還是方便很多的。而且 ViewBinding 在使用的過程中不存在類型轉換以及空指針異常的問題。因為在綁定類中已經全部定義好了。開發者直接使用就可以。和 Android Kotlin extensions 相比較我覺得都二者差不多。說不上誰更好。和databinding相比較就是數據綁定庫僅處理使用 <layout> 代碼創建的數據綁定布局。它具有局限性。

目前 Jake Wharton 也在 Butter Knife開源庫中添加了如下一句話:

Attention: Development on this tool is winding down. Please consider switching to view binding in the coming months.

補充:與findViewById的區別

與使用findViewById相比,視圖綁定具有重要的優勢:•空安全性:由于視圖綁定會創建對視圖的直接引用,因此不會因無效的視圖ID而導致空指針異常的風險。 此外,當視圖僅在布局的某些配置中存在時,在綁定類中包含其引用的字段將用@Nullable•類型安全性:每個綁定類中的字段具有與其在XML文件中引用的視圖匹配的類型。 這意味著沒有類強制轉換異常的風險。

這些差異意味著布局和代碼之間的不兼容性將導致編譯在編譯時而不是在運行時失敗。

與data binding 庫的區別

視圖綁定和數據綁定庫都生成可用于直接引用視圖的綁定類。 但是,有明顯的區別:•data binding庫僅處理使用標記創建的數據綁定布局。•view binding不支持布局變量或布局表達式,因此不能用于將布局與XML數據綁定。

到此這篇關于Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解的文章就介紹到這了,更多相關android 視圖綁定工具ViewBinding 使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久香蕉网站| 亚洲作爱视频| 亚洲国产日韩欧美在线| 精品视频在线观看网站| 亚洲精品少妇| 只有精品亚洲| 蜜桃av一区二区在线观看| 在线亚洲欧美| 婷婷丁香综合| 免费亚洲婷婷| 老牛国内精品亚洲成av人片| 欧美日韩一区自拍| 国产视频一区二区在线播放| 国产九一精品| 欧美成人a交片免费看| 天堂中文av在线资源库| 99久久亚洲精品蜜臀| 亚洲国产一区二区三区在线播放 | 国产精品社区| 国产精品资源| 亚洲欧洲高清| 在线 亚洲欧美在线综合一区| 视频福利一区| 石原莉奈在线亚洲二区| 国产图片一区| 激情欧美国产欧美| 日韩和欧美一区二区三区| 久久婷婷国产| 黄色成人精品网站| 久久av中文| 亚洲深夜福利| 亚洲精品人人| 国产日韩欧美三区| 久久久久国产精品一区三寸| 伊人成人网在线看| 日韩中出av| 99久久久久| 精品视频一区二区三区在线观看| 999精品在线| 欧美激情视频一区二区三区在线播放| 群体交乱之放荡娇妻一区二区| 日韩中文字幕不卡| av最新在线| 美女视频免费精品| 蜜桃视频第一区免费观看| 国产精品精品| 日本欧美在线| 蜜臀久久99精品久久久久久9| 日本久久黄色| 国产欧美视频在线| 一本色道精品久久一区二区三区| 国产精品99久久免费| 日韩天堂av| 欧美日韩国产观看视频| 日韩av三区| 日韩影院精彩在线| 98精品久久久久久久| 国产精品传媒麻豆hd| 日日摸夜夜添夜夜添国产精品| 欧美日韩视频一区二区三区| 97se综合| 久久天堂成人| 久久国产电影| 亚洲v在线看| 99久久夜色精品国产亚洲狼 | 亚洲精品乱码日韩| 国产精品福利在线观看播放| 日本电影久久久| 日韩福利视频导航| 国产精品嫩模av在线| 欧美日韩国产高清| 美女国产精品久久久| 久久香蕉网站| 久久亚洲图片| 欧美日中文字幕| 91成人小视频| 麻豆国产欧美一区二区三区| 欧美黄色精品| 韩国精品主播一区二区在线观看 | re久久精品视频| 麻豆精品网站| 国产精品手机在线播放| 精品深夜福利视频| 欧美粗暴jizz性欧美20| 美国三级日本三级久久99 | 麻豆国产精品| 自由日本语亚洲人高潮| 中文字幕日韩欧美精品高清在线| 日韩有吗在线观看| 色综合五月天| 亚洲一级黄色| 色狠狠一区二区三区| 日韩综合在线| 蜜桃久久精品一区二区| 日本成人在线网站| 亚洲女同中文字幕| 精品国产乱码久久久| 亚洲乱码一区| 色婷婷久久久| 日韩成人精品一区二区三区| 日韩美女精品| 欧洲激情综合| 国产欧美日本| 亚洲色诱最新| 日韩精品电影| 欧美香蕉视频| 免费一区二区三区在线视频| 国产精品男女| 欧美三区四区| 国产亚洲精品精品国产亚洲综合| 久久精品国产免费| 亚洲天堂日韩在线| 一区二区小说| av资源新版天堂在线| 国产欧美69| 蜜桃久久久久久| 久久裸体视频| 久久电影tv| 国产一区二区三区四区五区| 日韩超碰人人爽人人做人人添| 99国产精品久久久久久久| 日韩免费小视频| 欧美国产小视频| 国产精品伦理久久久久久| 精品免费视频| 麻豆极品一区二区三区| 国产精品一级| 色婷婷精品视频| 日韩精品免费一区二区三区| 老司机免费视频一区二区三区| 亚洲区欧美区| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩一区二区免费看| 久久国产成人| 国产农村妇女精品一二区| 久久国产亚洲| 欧美女激情福利| 亚洲精品乱码| 亚洲理论在线| 国产精品入口久久| 国产成人1区| 亚洲成人不卡| 中文亚洲欧美| 国产精品网站在线看| 国产中文在线播放| 激情婷婷综合| 五月激激激综合网色播| 久久免费精品| 伊人成人在线视频| 日韩精品中文字幕一区二区| 欧美一区二区三区久久精品| 久久久亚洲欧洲日产| 欧美日一区二区| 日韩不卡在线观看日韩不卡视频| 免费观看亚洲天堂| 欧美午夜不卡| 日韩精品dvd| 日韩免费精品| 99久久精品费精品国产| 欧美精品福利| 欧美+日本+国产+在线a∨观看| 91精品国产自产精品男人的天堂| 国产精品不卡| 青青草伊人久久| 久久九九精品| 久久国产麻豆精品| 亚洲性视频h| 久久亚洲精精品中文字幕| 欧美黑人做爰爽爽爽| 亚洲激精日韩激精欧美精品| 亚洲免费成人| 99久久夜色精品国产亚洲狼| 日韩制服丝袜av| 久久久久久黄| 麻豆网站免费在线观看| 国产精品中文| 亚洲欧洲国产精品一区| 亚洲激情久久| 日韩欧美精品综合| 国产精品一国产精品| 亚洲精品成人一区| 五月天久久久| 久久久久蜜桃| 久久久国产亚洲精品| 欧美成a人片免费观看久久五月天| 麻豆亚洲精品| 国产午夜久久| 国产女优一区| 石原莉奈一区二区三区在线观看| jiujiure精品视频播放| 伊人久久高清| 久久九九99| re久久精品视频| 影院欧美亚洲| 亚洲另类视频| 亚洲少妇诱惑| 最新国产精品视频| 91国内精品| 国产精品**亚洲精品| 久久亚洲人体|