< Kotlin > Kotlin Android Extensions (译文)
来源:互联网 发布:netstat 查看监听端口 编辑:程序博客网 时间:2024/05/16 19:56
原文链接:
http://kotlinlang.org/docs/tutorials/android-plugin.html
Kotlin Android Extensions
本教程介绍如何使用Kotlin Android Extensions来改进对Android开发的支持。
在本教程中,我们将介绍使用Kotlin Android Extensions插件所需的步骤,增强Android的开发体验。
背景
每个Android开发人员都很清楚findViewById()方法。 毫无疑问,这是一个难以阅读与维护,并且存在潜在bug的丑陋代码。 虽然有几个可用的库可以为此问题提供解决方案,但依赖于运行时的库,最让你头疼的是它们需要为每个View添加注释字段。
Kotlin Android Extensions插件允许我们获得与使用这些库后相同的体验,而无需添加任何额外的代码或消耗额外的运行时间。
实质上,下面这段代码时OK的:
// 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的扩展属性,并且它的类型和acitvity_main.xml文件中申明的一致。
使用Kotlin Android Extensions
配置依赖
在这个教程中,我们将使用Gradle作为我们的操作环境,在 IntelliJ IDEA 环境或者Maven下大同小异。更多关于Kotlin的Gradle配置,请查阅Using Gradle.
Android Extensions是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版本
Android Extensions 插件支持Android 多渠道版本,假如在你的build.gradle中有一个名为free的版本
android { productFlavors { free { versionName "1.0-free" } }}
然后你就可以通过如下方式导入针对free/res/layout/activity_free.xml的所有生成的属性。
import kotlinx.android.synthetic.free.activity_free.*
内部原理
Kotlin Android Extensions 是一个Kotlin编译器插件。它执行下面两个操作:
- 为每一个Kotlin Activity添加一个隐藏的缓存方法和一个域。这个方法相当之小,基本不会增加APK 的大小。
- 用方法调用替换每一个属性调用。
那么,这是如何工作的呢?
当调用一个生成的属性时,如果接收方时存在于模块源代码中的Kotlin Activity或者Fragment,缓存的方法将会被调用。例如,提供
class MyActivity: Activity()fun MyActivity.a() { this.textView.setText(“”) }
一个缓存方法会自动在MyActivity中生成,所有我们可以使用缓存机制。
然而在下面这个例子中
fun Activity.b() { this.textView.setText(“”) }
我们不知道这个方法是否仅在我们的源代码的Activity或普通Java Activity中被调用。 因此,即使上一个示例中的MyActivity实例是接收器,我们也不使用缓存。
- < Kotlin > Kotlin Android Extensions (译文)
- Use Kotlin Android Extensions
- kotlin初窥之Kotlin Android Extensions
- Kotlin学习之kotlin-android-extensions
- Kotlin开发Android笔记10:Kotlin中Kotlin Android Extensions
- Kotlin Android Extensions工具使用
- Kotlin编程之Kotlin Android Extensions(扩展插件)
- kotlin学习笔记——Kotlin Android Extensions
- Android Studio 添加Kotlin extensions支持
- Kotlin-Android-Extensions:不仅仅是替代findViewById
- Kotlin Android Extensions的集成相关
- < Kotlin > Getting started with Android and Kotlin (译文)
- Kotlin Reference (十二) Extensions
- Kotlin Android Extensions+Android MVP项目(RxJava+Rerotfit+OkHttp+Glide)
- kotlin in android 学习android extensions(一)
- Android Studio 添加Kotlin extensions 和lambda支持
- 使用Kotlin开发Android 扩展函数(Extensions)
- Android开发,Kotlin的了解与学习(二)-----Kotlin数据类型与Extensions的学习
- JAVA中正则表达式使用方法详解
- Oracle Embedded LDAP Error
- Cocos2dX常见的49种动作(action)
- 设计模式之建造型-简单工厂模式(2)
- Java学习过程中总结的方法(二)
- < Kotlin > Kotlin Android Extensions (译文)
- SVN技巧
- 关于java IO 逻辑层次理解
- IOS开发者账号申请流程
- C#与java的异同
- Hibernate:hibernate.cfg.xml 和 Spring配置中引入hibernate 的配置详解
- linux的用户及权限管理
- 【报错】Error parsing HTTP request header
- 分享一个android颜色选择器的使用教程