android studio 中使用kotlin语言 直接操作布局id

android studio 中使用kotlin语言 直接操作布局id

需要在 build.gradle 文件 引入

java 复制代码
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

(会自动生成,可忽略)然后在 Activity 文件中 引入 对应的 layout 文件 如:activity_main.xml

import kotlinx.android.synthetic.main.activity_main.*

然而,运行是会提示kotlin-android-extensions废弃

java 复制代码
【Android Studio】The 'kotlin-android-extensions' Gradle plugin is deprecated.

所以我们采用viewbinding来直接操作布局id

一、ViewBinding开启

在app下build.grade中加入以下代码

AS 3.6.x

java 复制代码
android {
	...
     viewBinding{
        enabled = true
  	}
}

AS 4.0.x

java 复制代码
android {
	...
    buildFeatures{
        viewBinding= true
    }
}

开启之后,创建xml布局文件时,编译器会自动化生成对应的xxxBinding文件。例如:activity_main.xml 对应生成ActivityMainBinding,下面进行代码演示

一、Activity中使用ViewBinding

1、创建MainActivity、activity_main.xml文件

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">

    <ImageView
        android:id="@+id/iv_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/transparent" />


    <FrameLayout
        android:id="@+id/fl_contain"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

2、Java中把自动生成的ActivityMainBinding进行填充绑定后再 setContentView(rootView);

java 复制代码
        //关键代码:binding xml布局
        mBinding = ActivityMainBinding.inflate(getLayoutInflater());
        View rootView = mBinding.getRoot();
        setContentView(rootView);

3、绑定之后就可以直接通过mBinding.xxx(xxx==id)使用控件,完整代码如下:

java 复制代码
public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding mBinding;

    @Override
    protected 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();
        });
    }
}

相关推荐
游戏开发爱好者836 分钟前
iOS 混淆工具链实战 多工具组合完成 IPA 混淆与加固 无源码混淆
android·ios·小程序·https·uni-app·iphone·webview
豆豆豆大王6 小时前
Android 数据持久化(SharedPreferences)
android
Paper_Love6 小时前
RK3588-android-reboot命令内核调用流程
android
介一安全6 小时前
【Frida Android】基础篇12:Native层hook基础——调用原生函数
android·网络安全·逆向·安全性测试·frida·1024程序员节
2501_916008897 小时前
用多工具组合把 iOS 混淆做成可复用的工程能力(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
android·开发语言·ios·小程序·uni-app·iphone·swift
Zach_yuan7 小时前
程序地址空间
android·linux·运维·服务器
带电的小王7 小时前
llama.cpp:Android端测试Qwen2.5-Omni
android·llama.cpp·qwen2.5-omni
I'm Jie8 小时前
(五)Gradle 依赖传递与冲突处理
java·spring boot·spring·kotlin·gradle·maven
明道源码8 小时前
Android Studio 代码编辑区域的使用
android·ide·android studio
小墙程序员9 小时前
从隐私协议了解Android App到底获取了哪些信息
android