以往要存取設定 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 = "大家好"
}
}
沒有留言:
張貼留言