早在今年的1月份,就有报道称谷歌2018年I/O大会将于5月8日至5月10日在加利福尼亚山景城的海岸线露天剧场举行。近日,谷歌公布了本次开发者大会的具体日程安排。在具体细节上,本次开发者大会将围绕Android、增强现实(AR)与虚拟现实(VR)三个主题来展开。
在本次开发者大会的首日,会议将从Google Play、Android即时应用、Android KTX,Android Kotlin开发和入门,以及 Android、Android apps for Chrome OS、Android Wear的最新进展。本文就Android KTX相关的知识做相关的讲解,可以看到Google对Kotlin的重视程度也越来越高。关于Android KTX相关的介绍,大家可以访问我之前的介绍:http://blog.csdn.net/xiangzhihong8/article/details/79277879

实例

字符串转为URI

通常情况下为 Uri.parse(uriString),但是 Android KTX 会为字符串添加一个扩展函数,使字符串更加自然地转换为 URI。例如:

// Kotlinval uri = Uri.parse(uriString)// android KTXval uri = uriString.toUri()

SharedPreferences

SharedPreferences也经常使用,使用 Android KTX后,代码也简介不少。

// kotlinsharedPreferences.edit()    .putBoolean("key", value)    .apply()// KTXsharedPreferences.edit {    putBoolean("key", value)}

Path

例如,两个路径之间的距离改变了100px。

// kotlinval pathDifference = Path(myPath1).apply {    op(myPath2, Path.Op.DIFFERENCE)}canvas.apply {  val checkpoint = save()  translate(0F, 100F)  drawPath(pathDifference, myPaint)  restoreToCount(checkpoint)}// KTXval pathDifference = myPath1 - myPath2canvas.withTranslation(y = 100F) {    drawPath(pathDifference, myPaint)}

View的onPreDraw监听

下面的示例触发了视图中 onPreDraw 的回调,如果没有 Android KTX,你需要编写相当多的代码。

// kotlinview.viewTreeObserver.addOnPreDrawListener(    object : ViewTreeObserver.OnPreDrawListener {        override fun onPreDraw(): Boolean {            viewTreeObserver.removeOnPreDrawListener(this)            actionToBeTriggered()            return true        }    })// KTXview.doOnPreDraw {     actionToBeTriggered()}

Android集成

要在你的 Android Kotlin 项目中开始使用 Android KTX,需要在应用模块 build.gradle的脚本文件中添加以下配置脚本。

repositories {    google()}dependencies {    implementation 'androidx.core:core-ktx:0.1'}

原理分析

在上面的Android KTX中,主要是使用了Kotlin 的几个特性,下面就这些特性进行简单的说明。

Extensions

在Kotlin的Extensions中有过详细的介绍,可以通过以下地址来获取更多的知识:http://kotlinlang.org/docs/reference/extensions.html。例如,uri的封装就是利用了这个特性。

inline fun String.toUri(): Uri = Uri.parse(this)

其实就是对String做了一个扩展,如果使用Java的就很容易理解,如下所示,这种方式在日常开发中也很容易见到。

public class StringUtil{    public static Uri parse(String uriString) {        return Uri.parse(uriString);    }}

Lambdas

对于Lambdas表达式和高阶函数,对于了解过Kotlin的同学来说并不陌生,
可以通过下面的链接来了解详细的介绍:http://kotlinlang.org/docs/reference/lambdas.html

还是先来看KTX的相关源码吧。首先对SharedPreferences做了扩展,然后这个扩展函数的参数是一个闭包,当函数最后一个参数是闭包的时候,函数的括号可以直接省略,然后在后面接上闭包就行了。

inline fun SharedPreferences.edit(action: SharedPreferences.Editor.() -> Unit) {    val editor = edit()    action(editor)    editor.apply()}

更多相关文章

  1. [深度报道]Android国内开发者陷盈利困局
  2. (转帖)Android开发者应该如何推广营销自己的应用程序
  3. [置顶] android中使用jni对字符串加解密实现分析
  4. 【干货推荐】Android市场今非昔比,Android开发者该学习哪些东西提
  5. android 复制字符串到剪贴板
  6. 重载android返回键响应函数
  7. Android Service绑定的时候没有回调onBound函数

随机推荐

  1. Docker 官方镜像加速
  2. Linux 下搭建 AliOS-Things 开发环境
  3. 如何在 Ubuntu 20.04 上添加交换空间
  4. 如何在 Ubuntu 20.04 上安装 MariaDB
  5. 使用 docker buildx 构建多 CPU 架构镜像
  6. Ubuntu 实例中添加 swap 分区的方法
  7. ubuntu 18.04 如何设置开机自动启动脚本
  8. CentOS 7 执行 yum 命令失败问题的排查方
  9. 如何在 Ubuntu 20.04 上安装 Node.js 和
  10. 【北亚数据恢复】sqlserver数据库被加密