前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android KTX举例

Android KTX举例

作者头像
xiangzhihong
发布2022-11-30 10:32:03
3650
发布2022-11-30 10:32:03
举报
文章被收录于专栏:向治洪向治洪

早在今年的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。例如:

代码语言:javascript
复制
// Kotlin
val uri = Uri.parse(uriString)

// android KTX
val uri = uriString.toUri()

SharedPreferences

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

代码语言:javascript
复制
// kotlin
sharedPreferences.edit()
    .putBoolean("key", value)
    .apply()

// KTX
sharedPreferences.edit {
    putBoolean("key", value)
}

Path

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

代码语言:javascript
复制
// kotlin
val pathDifference = Path(myPath1).apply {
    op(myPath2, Path.Op.DIFFERENCE)
}

canvas.apply {
  val checkpoint = save()
  translate(0F, 100F)
  drawPath(pathDifference, myPaint)
  restoreToCount(checkpoint)
}

// KTX
val pathDifference = myPath1 - myPath2

canvas.withTranslation(y = 100F) {
    drawPath(pathDifference, myPaint)
}

View的onPreDraw监听

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

代码语言:javascript
复制
// kotlin
view.viewTreeObserver.addOnPreDrawListener(
    object : ViewTreeObserver.OnPreDrawListener {
        override fun onPreDraw(): Boolean {
            viewTreeObserver.removeOnPreDrawListener(this)
            actionToBeTriggered()
            return true
        }
    })

// KTX
view.doOnPreDraw {
     actionToBeTriggered()
}

Android集成

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

代码语言:javascript
复制
repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:0.1'
}

原理分析

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

Extensions

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

代码语言:javascript
复制
inline fun String.toUri(): Uri = Uri.parse(this)

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

代码语言:javascript
复制
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做了扩展,然后这个扩展函数的参数是一个闭包,当函数最后一个参数是闭包的时候,函数的括号可以直接省略,然后在后面接上闭包就行了。

代码语言:javascript
复制
inline fun SharedPreferences.edit(action: SharedPreferences.Editor.() -> Unit) {
    val editor = edit()
    action(editor)
    editor.apply()
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例
    • 字符串转为URI
      • SharedPreferences
        • Path
          • View的onPreDraw监听
            • Android集成
            • 原理分析
              • Extensions
                • Lambdas
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档