2022-10-10

【Kotlin】檢視繫結 ViewBinding

參考資料 ----

以往要存取設定 layout 中的某個元件時,是透過 findViewById()

現在以 ViewBinding 的方式,就可以簡化,不需要上面的宣告了;AndroidStudio 3.6(含)以上版本才支援本功能。

app 層級 build.gradle
 
...
...

android {
    
    ...
    ...
    
    // 舊寫法
    // viewBinding {
    //     enabled = true
    // }
    // 依據 Android Studio 的版本,可能會提示您改成下面的寫法
    buildFeatures {
        viewBinding true
    }
    
    ...
    ...
 

activity_main.xml
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/lblHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_alignParentEnd="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />

</RelativeLayout>
 

MainActivity.kt
 
...
...

// import [完整package name].databinding.[layout駝峰命名+Binding]
// 在本例中:
// 我們的 package name 為 com.example.vb
// layout 名為 activity_main.xml
import com.example.vb.databinding.ActivityMainBinding    // 這列在您輸入第 13 列的宣告時會自動提示生成

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding    // 宣告時會自動提示生成第 9 列

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        // setContentView(R.layout.activity_main)
        setContentView(view)
        
        // 變更元件 lbltHello 內的文字
        binding.lblHello.text = "大家好"

    }
}
 


沒有留言:

張貼留言