Kotlin Android Extensions工具使用

来源:互联网 发布:网络错误404是怎么办 编辑:程序博客网 时间:2024/06/05 05:47
本教程介绍如何使用Kotlin Android Extensions来改进对Android开发的支持。 

在本教程中,我们将介绍使用Kotlin Android Extensions插件所需的步骤,增强Android的开发体验。

背景

每个Android开发人员都知道这个findViewById()功能。毫无疑问,这是一个难以阅读和支持的潜在错误和恶劣代码的来源。虽然有几个可用的库可以为此问题提供解决方案,但是依赖于运行时的库,它们需要为每个库注释字段View

Kotlin Android Extensions插件允许我们获得与这些库中的一些相同的体验,而无需添加任何额外的代码或运送任何额外的运行时。

实质上,这将允许以下代码:

// Using R.layout.activity_main from the main source setimport kotlinx.android.synthetic.main.activity_main.*class MyActivity : Activity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        textView.setText("Hello, world!")        // Instead of findView(R.id.textView) as TextView    }}

textView是一个扩展属性Activity,它的声明类型相同activity_main.xml

使用Kotlin Android扩展

配置依赖关系

在本教程中,我们将使用Gradle,但可以使用IntelliJ IDEA项目结构或Maven完成相同的操作。有关设置Gradle与Kotlin一起工作的详细信息,请参阅使用Gradle。

Android扩展程序是Kotlin IDEA插件的一部分。您不需要安装其他插件。

您需要的是在项目本地build.gradle文件中启用Android Extensions Gradle插件:

apply plugin: 'kotlin-android-extensions'

导入合成属性

一次性导入特定布局的所有窗口小部件属性是方便的:

import kotlinx.android.synthetic.main.<layout>.*

因此,如果布局文件名是activity_main.xml,我们将导入kotlinx.android.synthetic.main.activity_main.*

如果我们要调用合成属性View(在适配器类中有用),我们也应该导入kotlinx.android.synthetic.main.activity_main.view.*

一旦我们这样做,我们可以调用相应的扩展,这是在XML文件中的视图之后命名的属性。例如,对于这个视图:

    <TextView            android:id="@+id/hello"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="Hello World, MyActivity"            />

将会有属性命名hello

activity.hello.setText("Hi!")

Android Flavors

Android Extensions插件支持Android风格。假设你freebuild.gradle文件中有一个风味:

android {    productFlavors {        free {            versionName "1.0-free"        }    }}

因此,您可以free/res/layout/activity_free.xml通过添加此导入来导入布局的所有合成属性:

import kotlinx.android.synthetic.free.activity_free.*

在引擎盖下

Kotlin Android Extensions是Kotlin编译器的插件,它有两件事情:

  1. 在每个Kotlin内添加一个隐藏的缓存功能和一个字段Activity。方法很小,所以它不会增加APK的大小。
  2. 用函数调用替换每个合成属性调用。

这是如何工作的,当调用合成属性时,接收方是模块源中的Kotlin Activity / Fragment类,缓存函数被调用。例如给定

class MyActivity: Activity()fun MyActivity.a() {         this.textView.setText(“”) }

MyActivity内部生成隐藏的缓存功能,因此我们可以使用缓存机制。

但在以下情况下:

fun Activity.b() {         this.textView.setText(“”)     }

我们不知道这个函数是否仅在我们的来源的活动或普通Java活动中被调用。因此,即使上一个示例中的MyActivity实例是接收器,我们也不使用缓存。

原创粉丝点击