Android 教學【開發 Android App 手機應用程式:使用 kotlin 程式語言】findViewById 與 View Binding 使用方式
【開發 Android APP 手機應用程式:使用 kotlin 程式語言】
線上教學課程目錄:http://bit.ly/3gH1Gjw
Youtube 課程播放清單: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」,路徑如下,可以開啟該檔案觀摩一下,生成的檔案結構。
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線上教室"
}
}
執行結果
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 安全
- 類型安全
- 大幅簡化程式碼
那這次的課程就介紹到這邊囉~
順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。
我們下次再見囉!!!掰掰~