美文网首页程序员首页投稿Android Kotlinkotlin
当 Kotlin 遇上 Android KTX,岂止丝滑?

当 Kotlin 遇上 Android KTX,岂止丝滑?

作者: 亦枫 | 来源:发表于2018-02-11 14:23 被阅读1978次

    Kotlin 语言自从得到 Google 的官方认定之后,在 Android 开发这条路上的发展可谓是一马平川。不仅是 Android Studio 3.0 开始默认自动支持 Kotlin 语言,还有一件更为惊喜的事。

    Google 于上周正式对外发布 Android KTX 预览版。

    Android KTX 是什么呢?简单来说,它就是类似于我们开发中常用的 Support Library 这种支持类库,提供一些非常人性化的 APIs 来帮助使用开发人员更简洁、更符合编程习惯地编写 Kotlin 代码。

    接下来举几个例子,来见证一下使用 Android KTX 框架前后,我们的 Kotlin 代码究竟变化多少,是不是更加简洁、自然一些。

    String to Uri

    使用 Kotlin 将一个 String 对象转化成 Uri 对象是这么写的:

    val uri = Uri.parse(myUriString)
    

    Android KTX 框架在 String 的基础上进行扩展,增加更多的方法,所以上面这行代码便能这么写:

    val uri = myUriString.toUri()
    

    这样的话,你不必再单独引入 Uri 类,写起来是不是有一种行云流水、一气呵成的感觉?

    SharedPreferences

    Kotlin:

    sharedPreferences.edit()
               .putBoolean(key, value)
               .apply()
    

    Kotlin with Android KTX:

    sharedPreferences.edit { 
        putBoolean(key, value) 
    }
    

    canvas path 操作

    Kotlin:

    val pathDifference = Path(myPath1).apply {
       op(myPath2, Path.Op.DIFFERENCE)
    }
    
    val myPaint = Paint()
    
    canvas.apply {
       val checkpoint = save()
       translate(0F, 100F)
       drawPath(pathDifference, myPaint)
       restoreToCount(checkpoint)
    }
    

    Kotlin with Android KTX:

    val pathDifference = myPath1 - myPath2
    
    canvas.withTranslation(y = 100F) {
       drawPath(pathDifference, myPaint)
    }
    

    View onPreDraw 动作

    Kotlin:

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

    Kotlin with Android KT:

    view.doOnPreDraw { actionToBeTriggered() }
    

    诸如此类的例子还有很多。可以看出,使用 Android KTX 极大地简化我们的 Kotlin 代码。

    只要你在 app/build.gradle 文件中引入 Android KTX 的依赖配置:

    repositories {
        google()
    }
    
    dependencies {
        // Android KTX for framework API
        implementation 'androidx.core:core-ktx:0.1'
        ...
    }
    

    开发时,IDE 会自动根据你的代码智能提示,自动补全相关代码。

    还有一点值得一提的是,Android KTX 使用一个全新的 包名前缀:androidx。Google 希望将来提供 Android Support Library 包时,开发人员能够明显地区分出 *android. **与 *androidx. **这两种 API 的使用。这是一个体贴入微的设计细节,Google 想得非常周到。

    Android KTX 的源码已经放在 GitHub 仓库中,目前还在完善改进当中:

    https://github.com/android/android-ktx/

    相关文章

      网友评论

      本文标题:当 Kotlin 遇上 Android KTX,岂止丝滑?

      本文链接:https://www.haomeiwen.com/subject/fhwktftx.html