Android扩展Kotlin
在本教程中,我们将介绍使用Kotlin Android Extensions插件所需的步骤,增强Android的开发体验。
一.背景
每个Android开发人员都很清楚findViewById()函数。 毫无疑问,这种写法一方面难以阅读和支持,并且存在潜在错误和令人讨厌的引用错误。 虽然有几个可用的库可以为此问题提供解决方案,但是依赖于运行时库,它们需要为每个View注释字段。
Kotlin Android Extensions插件允许我们获得与这些库中的一些相同的体验,而无需添加任何额外的代码或运送任何额外的运行时。
实质上,它允许以下代码:
其中,textView是Activity的扩展属性,它与在activity_main.xml中声明的类型相同。
二.使用Kotlin Android扩展
2.1配置依赖关系
在本教程中,我们将使用Gradle,但可以使用IntelliJ IDEA项目结构或Maven完成相同的操作。Android扩展程序是Kotlin IDEA插件的一部分。不需要安装其他插件。
需要的是在项目本地启用Android Extensions Gradle插件。
build.gradle file:
apply plugin: 'kotlin-android-extensions'
2.2导入合成属性
一次性导入特定布局的所有窗口小部件属性都很方便:
import kotlinx.android.synthetic.main.<layout>.*
因此,如果布局文件名是activity_main.xml,我们将导入:
kotlinx.android.synthetic.main.activity_main*
如果要在View上调用合成属性(在适配器类中有用),我们还应该导入 kotlinx.android.synthetic.main.activity_main.view.*
一旦我们这样做,我们可以调用相应的扩展名,这些扩展名是XML文件中的视图后面命名的属性。 例如,对于这个视图:
将有一个名为hello的属性:
activity.hello.setText("Hi!");
三.Android风格
Android Extensions插件支持Android风格。 假设你的build.gradle文件中有一个名为free的配置:
因此,可以通过添加此导入来导入free / res / layout / activity_free.xml布局的所有合成属性:
import kotlinx.android.synthetic.free.activity_free.*
四.在引擎盖下
Kotlin Android Extensions是Kotlin编译器的插件,它有两件事情要做:
在每个Kotlin活动中添加一个隐藏的缓存功能和一个字段。 该方法很小,所以它不会增加APK的大小。
用函数调用替换每个合成属性调用。
这是如何工作的呢?当调用合成属性时,接收方是模块源中的Kotlin Activity / Fragment类,缓存函数被调用。 例如,给定
在MyActivity内部生成一个隐藏的缓存功能,所以我们可以使用缓存机制。但在以下情况下例外:
我们不知道这个函数是否仅在我们的来源的活动或普通Java活动中被调用。 因此,即使上一个示例中的MyActivity实例是接收器,我们也不使用缓存。