android studio 中使用kotlin語言 直接操作布局id
需要在 build.gradle 文件 引入
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
(會自動生成,可忽略)然后在 Activity 文件中 引入 對應的 layout 文件 如:activity_main.xml
import kotlinx.android.synthetic.main.activity_main.*
然而,運行是會提示kotlin-android-extensions廢棄
【Android Studio】The ‘kotlin-android-extensions‘ Gradle plugin is deprecated.
所以我們采用viewbinding來直接操作布局id
?
一、ViewBinding開啟
在app下build.grade中加入以下代碼
AS 3.6.x
android {...viewBinding{enabled = true}
}
AS 4.0.x
android {...buildFeatures{viewBinding= true}
}
開啟之后,創建xml布局文件時,編譯器會自動化生成對應的xxxBinding文件。例如:activity_main.xml 對應生成ActivityMainBinding,下面進行代碼演示
一、Activity中使用ViewBinding
1、創建MainActivity、activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><ImageViewandroid:id="@+id/iv_test"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@color/transparent" /><FrameLayoutandroid:id="@+id/fl_contain"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>
2、Java中把自動生成的ActivityMainBinding進行填充綁定后再 setContentView(rootView);
//關鍵代碼:binding xml布局mBinding = ActivityMainBinding.inflate(getLayoutInflater());View rootView = mBinding.getRoot();setContentView(rootView);
3、綁定之后就可以直接通過mBinding.xxx(xxx==id)使用控件,完整代碼如下:
public class MainActivity extends AppCompatActivity {private ActivityMainBinding mBinding;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//關鍵代碼:binding xml布局mBinding = ActivityMainBinding.inflate(getLayoutInflater());View rootView = mBinding.getRoot();setContentView(rootView);//使用介紹mBinding.ivTest.setBackground(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));mBinding.flContain.setOnClickListener(v -> {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.add(R.id.fl_contain, new BindViewFragment());transaction.commit();});}
}
?