AndroidKTX使用介绍

android-ktx是做什么的呢?
官方解释说:Android应用程序开发的一套Kotlin扩展。
(注意:该项目的明确目标是不向现有的Android API添加任何新功能。)
程序猿不是很聪明的一个群体么?发明轮子的加强版聪明人,做出来的轮子没加新功能,那它存在的意义是啥呢?
其真正的目的就是:使Kotlin的开发更加简洁,开发过程更加愉快,更加节约时间。
你要相信,能提高效率的东西都是好东西。省出来的时间,你可以做更多的事情。下面来看看有什么优势吧!


KTX 使用介绍

引入依赖库

  • 在app module’s 的 build.gradle引入库
    1
    2
    3
    4
    5
    6
    7
    repositories {
    google()
    }

    dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-alpha1'
    }

一些代码使用示例

sharedPreferences 使用对比

  • kotlin

    1
    2
    3
    sharedPreferences.edit()
    .putBoolean("key", value)
    .apply()
  • kotlin + android KTX

    1
    2
    3
    sharedPreferences.edit {
    putBoolean("key", value)
    }

addOnPreDrawListener 使用对比

  • kotlin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    view.viewTreeObserver.addOnPreDrawListener(
    object : ViewTreeObserver.OnPreDrawListener {
    override fun onPreDraw(): Boolean {
    viewTreeObserver.removeOnPreDrawListener(this)
    actionToBeTriggered()
    return true
    }
    }
    )
  • kotlin + android KTX

    1
    2
    3
    view.doOnPreDraw {
    actionToBeTriggered()
    }

sqlite 使用对比

  • kotlin

    1
    2
    3
    4
    5
    6
    7
    db.beginTransaction()
    try {
    // insert data
    db.setTransactionSuccessful()
    } finally {
    db.endTransaction()
    }
  • kotlin + android KTX

    1
    2
    3
    db.transaction {
    // insert data
    }

fragment 使用对比

  • kotlin

    1
    2
    3
    4
    supportFragmentManager
    .beginTransaction()
    .replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
    .commitAllowingStateLoss()
  • kotlin + android KTX

    1
    2
    3
    supportFragmentManager.transaction(allowStateLoss = true) {
    replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
    }

字符串转Uri 使用对比

  • kotlin

    1
    val uri = Uri.parse(myUriString)
  • kotlin + android KTX

    1
    val uri = myUriString.toUri()

平移路径差

在下面的代码中,我们将两个路径之差平移 100px

  • kotlin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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 + android KTX

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

KTX 其他代码结构

KTX 相关开源项目推荐