# Android筆記(kotlin)--ViewBinding(視圖綁定) View Binding 是一種官方推薦且輕量級的工具,它可以在不引入額外的複雜性的情況下幫助開發者綁定視圖。==ViewBinding內建在Android Studio中,但預設是關閉的,需要手動啟用==。 使用 View Binding,Android 系統會自動生成一個對應於每個 layout 文件的綁定類(Binding class)。這個綁定類包含了 layout 文件中的所有視圖元素的直接引用。在大多數情況下,視圖綁定會取代 findViewById。 ==簡白的來說,ViewBinding的作用就是能讓"原本需要一堆findViewById()才能產生關連的元件",可以直接像"layout中的activity_main.xml裡的文字"和"value中的string.xml"一樣,直接使用名子來引用的工具。== 相對於findViewById來說,ViewBinding有以下優點: - Null safety 空安全:由於視圖綁定創建了對視圖的直接引用,因此不存在因視圖 ID 無效而導致空指針異常的風險。 - Type safety 類型安全:每個綁定類中的字段的類型與其在 XML 文件中引用的視圖相匹配。 ---- ## ▼啟用: 想要使用View Binding,需先在build.gradle.kts(Module:app)裡啟用View Bingding功能,有三種啟用方式。 :::spoiler ◇方法一◆ 在build.gradle.ktsdependencies中的dependencies段中加上 **備註:此方法可以指定版本號例如:androidx.viewbinding:viewbinding:1.0.0,也可不指定版本。** ``` dependencies{ ... implementation ("androidx.viewbinding:viewbinding") } ```  --- ::: :::spoiler ◇方法二◆ 在build.gradle.kts中加上(==注意,這裡的"viewBinding"的"v"是小寫==) ``` android{ ... viewBinding{ enable = true } } ```  ::: :::spoiler ◇方法三◆build.gradle.kts中加上(和方法二差不多) ``` android { ... buildFeatures { viewBinding true } } ``` ::: --- ## ▼基本使用: 對一個物件和想要關聯的ViewBinding佈局文件使用"inflate(layoutInflater)"方法後,就可以直接使用名稱就進行引用了。  --- ## ▼將別的視圖附加上去 --- ※在Fragment中使用ViewBinding※ --- 前置閱讀: [Android筆記–Fragment](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/android_Fragment) ### 基本使用: 只需要改動Fragment Class的內容即可 ```kotlin= class BlankFragment_2: Fragment() { private lateinit var binding: FragmentBlankBinding //增加了這行 companion object{ val instance: BlankFragment_2 by lazy { BlankFragment_2() } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { //A或B選一種 binding = FragmentBlankBinding.inflate(inflater, container, false)//方法A,通常使用的標準寫法 binding = FragmentBlankBinding.inflate(layoutInflater)//方法B return binding.root //改動了這行 } } ``` - :::spoiler `inflate(inflate, container, false)`和`inflate(layoutInflater)`的差異 - `inflate(inflater, container, false)` : - 明確指定 container 為父佈局,設置 false 表示不要立即將佈局附加到父容器中。 - 這樣可以讓 Fragment 正常管理佈局的附加 - container 設定後,佈局可以更好地配合父容器的屬性,並確保 Fragment 的生命週期內正確地管理視圖。 - `inflate(layoutInflater)` : - 使用 layoutInflater 將 FragmentABinding 綁定到佈局,但沒有指定父容器 container。 - 因為沒有 container,佈局不會自動附加到父佈局中,這樣可能導致無法正確套用一些 Layout 屬性(例如 match_parent 或 wrap_content 等)。 - 適用於不需要依賴父容器的情境,或是某些自訂的視圖。 ::: --- 參考資料: --- - [【Android APP 開發教學】元件綁定 View Binding](https://tw-hkt.blogspot.com/2021/01/android-app-view-binding.html) - [AndroidDevelopers--视图绑定](https://developer.android.com/topic/libraries/view-binding?hl=zh-cn) - [是时候拥抱ViewBinding了~](https://blog.csdn.net/u010976213/article/details/104501830) - [Android ViewBinding 使用详解](https://juejin.cn/post/6995069102041595940) - [Kotlin Android 第18天,從 0 到 ML - View Binding](https://ithelp.ithome.com.tw/articles/10270251?sc=rss.iron) - ★[影片-【Android 开发教程】50 ViewBinding](https://youtu.be/0WjKrNZ7fcY?si=LqOOX28bazdnR3Cn) - [[Google Course] Android Basics in Kotlin(第5篇) — ViewBinding](https://happyphoebe40090.medium.com/google-course-android-basics-in-kotlin-%E7%AC%AC5%E7%AF%87-viewbinding-183388315083)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up