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