View Binding 快速入門指南

閱讀時間約 7 分鐘
【Android 入門指南】系列文章目錄:https://bit.ly/3TFgCzu
Android 線上課程教學影片:https://bit.ly/433Offj

課程摘要

本課程學習如何使用 View Binding。

教學影片

若您無法順利觀看教學影片,請先登入您的 YouTube 帳號,然後點擊以下連結加入我們的頻道會員:

  • 一般會員:成為一般會員後,您將能夠觀看我們所提供的一般會員專屬線上課程。
  • 精實會員:成為精實會員後,您將能夠觀看我們所提供的精實會員專屬線上課程。

findViewById 與 View Binding

findViewById (傳統舊方法)

XML 佈局文件中的 id ,需自行定義名稱,注意此為唯一值,不能重複。

<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

可以透過 findViewById 的方式獲取 XML 佈局文件中的元件,進行更多該元件設定。

val myTextView = findViewById<TextView>(R.id.myTextView)
myTextView.text = "HKT線上教室"

View Binding (現代新方法)

View Binding 使用方式

程式碼範例

範例名稱:View Binding
作者:HKT (侯光燦)
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載

build.gradle (app)

View Binding 預設是被封印,沒有開啟,需要到 build.gradle (app) 開啟 View Binding ,先看一下自己當下 Android Studio 版本,擇一就好不要通通貼上去。

//AAndroid Studio Giraffe 2022.3.1 build.gradle.kts
android {
...
buildFeatures {
viewBinding = true
}
}

其他種版本設定方式:

//Android Studio 4.0 或更高版本
android {
...
buildFeatures {
viewBinding true
}
}

//Android Studio 3.6 (之前版本不能使用)
android {
...
viewBinding {
enabled = true
}
}

activity_main.xml

在空白範本(Empty View Activity)的佈局當中,在 TextView 裡面,新增一個 id 屬性,屬性值設定為為 myTextView。

<TextView
android:id="@+id/myTextView"
...
...
.../>

app\build\generated

進行編譯(build 或 rebuild)後,每個 Layout 就會對應生成一個綁定類別。如:MainActivity.kt 的 Layout 為 「activity_main.xml」,就會產生一個「ActivityMainBinding.java」,路徑如下,可以開啟該檔案觀摩一下,生成的檔案結構。

raw-image

MainActivity.kt

在 Activity 使用方式,如下:

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.myTextView.text = "HKT線上教室"
}
}

執行結果

raw-image

KT 的偷呷步

若 APP 應用程式裡,有大量頁面(Activity 或 Fragment),可以將 inflate 那一段,用映射的方式寫到自定義的基礎類別裡面,BaseActivity 或 BaseFragment,之後只要在 XML 佈局定義好 id 值,基本上就可以直接拿來用,不用因為畫面元件多,就要事前宣告和 findViewById 定義一堆,大量減少程式與維護的功。

基底類別

可以把共用、常用的東西都放在基底類別。

abstract class BaseActivity<viewBinding : ViewBinding>(val bindingFactory: (LayoutInflater) -> viewBinding) : AppCompatActivity() {

lateinit var binding: viewBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = bindingFactory(layoutInflater)
setContentView(binding.root)
}
}

使用基底類別 View Binding範例

class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {

//private lateinit var binding: ActivityMainBinding //省略

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

//binding = ActivityMainBinding.inflate(layoutInflater) //省略
//setContentView(binding.root) //省略

binding.btn1.text = "HKT線上教室"
}
}

findViewById 與 View Binding 比較

View Binding 相較於 findViewById 有以下優點

  • Null 安全
  • 類型安全
  • 大幅簡化程式碼
avatar-img
10會員
231內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
本課程學習如何使用 LinearLayout 線性佈局中的 layout_weight 權重屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 layout_gravity 對齊屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 gravity 對齊屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 padding 內部間距屬性。
本課程學習如何使用 LinearLayout 線性佈局中的orientation 排列方向屬性。
本課程跟大家介紹常見的 Android 佈局方式:LinearLayout、ConstraintLayout、RelativeLayout、FrameLayout、TableLayout、GridLayout 和 CoordinatorLayout。
本課程學習如何使用 LinearLayout 線性佈局中的 layout_weight 權重屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 layout_gravity 對齊屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 gravity 對齊屬性。
本課程學習如何使用 LinearLayout 線性佈局中的 padding 內部間距屬性。
本課程學習如何使用 LinearLayout 線性佈局中的orientation 排列方向屬性。
本課程跟大家介紹常見的 Android 佈局方式:LinearLayout、ConstraintLayout、RelativeLayout、FrameLayout、TableLayout、GridLayout 和 CoordinatorLayout。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天來寫點FLutter的筆記吧 如果我們想要在APP中限制使用者的畫面顯示方向,不支持使用者橫放造成畫面佈局異常,或是想要在全螢幕顯示強制變橫向顯示,該怎麼做呢?
Thumbnail
Aert van der Neer是荷蘭的畫家。生前其實並沒有太多關注,不過現在他的作品跟夜巡一樣擺放在阿姆斯特丹的博物館當中。他擅長冬季場景和夜間的月光景觀。 並沒有太多顏色在這幅畫上,但是你卻可以感受到很多變化,這是多難的事情。寒冷的月光映照在水面,看著湖面好像看見真的湖景。 近幾年身邊的朋友都
在 Rail 的 MVC 架構中,M 是負責驗證與邏輯、以及轉譯向資料庫溝通的角色; C 是負責資料的搬運,搬往 M 或 V; V 則是負責畫面的呈現、及使用者與資料的互動,並將請求送往C,接著得到 C 送回來的資料。 form_tag form_for form_with
Thumbnail
View  Point 在寮國的登山道,一種是由導遊及村導帶著你上山的 另外一種則是自己到達登山口 入口處會有個收費小涼亭 付費後自行攀爬上去 好處是步道有人維護及使用者付費 同時也為當地帶來收入 因為在寮國多數旅行社背後的資方來自歐美國家 最終回饋到當地的是薪酬而非獲利 當然適時引入環保概念並加以
編輯 view /_ViewStart.cshrml 到您要使用的 view檔名即可。 原來 @{     Layout = "_Layout"; } 新檔 @{     Layout = "NewLayout"; } 
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天來寫點FLutter的筆記吧 如果我們想要在APP中限制使用者的畫面顯示方向,不支持使用者橫放造成畫面佈局異常,或是想要在全螢幕顯示強制變橫向顯示,該怎麼做呢?
Thumbnail
Aert van der Neer是荷蘭的畫家。生前其實並沒有太多關注,不過現在他的作品跟夜巡一樣擺放在阿姆斯特丹的博物館當中。他擅長冬季場景和夜間的月光景觀。 並沒有太多顏色在這幅畫上,但是你卻可以感受到很多變化,這是多難的事情。寒冷的月光映照在水面,看著湖面好像看見真的湖景。 近幾年身邊的朋友都
在 Rail 的 MVC 架構中,M 是負責驗證與邏輯、以及轉譯向資料庫溝通的角色; C 是負責資料的搬運,搬往 M 或 V; V 則是負責畫面的呈現、及使用者與資料的互動,並將請求送往C,接著得到 C 送回來的資料。 form_tag form_for form_with
Thumbnail
View  Point 在寮國的登山道,一種是由導遊及村導帶著你上山的 另外一種則是自己到達登山口 入口處會有個收費小涼亭 付費後自行攀爬上去 好處是步道有人維護及使用者付費 同時也為當地帶來收入 因為在寮國多數旅行社背後的資方來自歐美國家 最終回饋到當地的是薪酬而非獲利 當然適時引入環保概念並加以
編輯 view /_ViewStart.cshrml 到您要使用的 view檔名即可。 原來 @{     Layout = "_Layout"; } 新檔 @{     Layout = "NewLayout"; }