Android KTX举例
早在今年的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()}
更多相关文章
- [深度报道]Android国内开发者陷盈利困局
- (转帖)Android开发者应该如何推广营销自己的应用程序
- [置顶] android中使用jni对字符串加解密实现分析
- 【干货推荐】Android市场今非昔比,Android开发者该学习哪些东西提
- android 复制字符串到剪贴板
- 重载android返回键响应函数
- Android Service绑定的时候没有回调onBound函数