亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:45日期: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
相關文章:
主站蜘蛛池模板: 日韩在线视频免费看 | 激情丁香婷婷 | 一级黑人 | 在线500福利视频国产 | 日韩电影久久久被窝网 | 国产精品单位女同事在线 | a色毛片免费视频 | 最新国产成人盗摄精品视频 | 免费一级黄色片 | 99青青草| 亚洲视频国产精品 | 草草线在成人免费视频 | 香蕉视频美女 | 日韩国产免费一区二区三区 | 黄性色 | 国内免费在线视频 | 丁香婷婷激情 | 日韩精品一区二区在线观看 | 国产色司机在线视频免费观看 | 在线免费观看视频黄 | 亚洲玖玖| 亚洲国产精品免费观看 | 亚洲区一二三四区2021 | 96国产精品| 免费观看国产 | 久久国产精品久久 | 国产性生大片免费观看性 | 国产一区欧美 | 成人区视频爽爽爽爽爽 | 国产成人一区二区三区精品久久 | 欧美色频 | 薰衣草视频高清在线观看免费 | 亚洲码在线观看 | 成人在线精品 | 国产精品一区伦免视频播放 | 中日黄色大片 | 91久久国产口精品久久久久 | 一 级 黄 中国色 片 | 国产一级性生活 | 欧美一级看片a免费观看 | 国产美女精品三级在线观看 |