Android KTX简介


  • Android KTX简介

    • 介绍
    • 主要功能
      • 字符串转为URI
      • SharedPreferences
      • Path
      • View的onPreDraw监听
    • 代码接入
    • 原理介绍
      • Extensions
      • Lambdas
      • Default Arguments
    • 相关链接

介绍

昨天Google爸爸又发布了一个Android工具库,是使用Kotlin实现了。自从17年5月份声明支持Kotlin作为Android官方开发语言以来,Google爸爸对Kotlin的态度还是很积极的。
而且Jake大神后面也加入了Google,从博客的内容来看,也是这个类库也是出自Jake大神之手,所以特来拜读下。

主要功能

从官方简介来看,主要是对Android原始的Api做了一些扩展,方便开发调用,使代码更加自然和简单,下面列举几个例子,详细的API介绍可以参考官方API文档。

字符串转为URI

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

// Kotlin
val uri = Uri.parse(uriString)// android KTX
val uri = uriString.toUri()

SharedPreferences

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

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

Path

两个路径之间的距离改变了100px

// 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 - myPath2canvas.withTranslation(y = 100F) {drawPath(pathDifference, myPaint)
}

View的onPreDraw监听

触发了视图中 onPreDraw 的回调

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

代码接入

代码接入也很简单,首先项目代码必须接入kotlin,这里不做介绍,直接使用Android Studio创建基于Kotlin的项目即可,然后添加相关依赖,现在的版本还是0.1

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

原理介绍

透过现象看本质,这样使用起来就不会迷惑,而且遇到问题也能方便排查。

主要使用Kotlin语言的几个特性,了解了这些特性后,我们自己也能很方便的进行封装,这样就形成了我们自己的类库,便于自己技术的沉淀。

Extensions

上面的第一个例子,uri的封装就是利用了这个,Kotlin的官方文档也有介绍。

直接看源码就行了。

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文档在这里。

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

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

Default Arguments

这个特性上面的例子没有,可以单独列举,如下所示。官方文档介绍。
也是就说,当一个函数中含有多个参数时候,不需要像Java中那样,依次赋值,可以仅仅赋需要的即可,Java中常见的解决的方法是方法重载,挨个传入默认值。

class ViewTest {private val context = InstrumentationRegistry.getContext()private val view = View(context)@Testfun updatePadding() {view.updatePadding(top = 10, right = 20)assertEquals(0, view.paddingLeft)assertEquals(10, view.paddingTop)assertEquals(20, view.paddingRight)assertEquals(0, view.paddingBottom)}
}

updatePadding方法定义。

fun View.updatePadding(@Px left: Int = paddingLeft,@Px top: Int = paddingTop,@Px right: Int = paddingRight,@Px bottom: Int = paddingBottom
) {setPadding(left, top, right, bottom)
}

对于默认参数,还可以这样玩,比如在Java中,常见的有建造在模式,对每个参数进行赋值,然后创建一个对象,如果使用这种特性,不需要改变的值,可以直接用默认值表示,这样在编码的时候,就会显得很简洁。

相关链接

官方博客

Github链接

API参考文档

Android KTX简介相关推荐

  1. Jetpack架构组件 (一)-- Android Jetpack 简介

    前言 Android 已经发展十多年了,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库操作,数据解析等等.后来出现了一些框架来帮助开发者快速进 ...

  2. Android KTX举例

    早在今年的1月份,就有报道称谷歌2018年I/O大会将于5月8日至5月10日在加利福尼亚山景城的海岸线露天剧场举行.近日,谷歌公布了本次开发者大会的具体日程安排.在具体细节上,本次开发者大会将围绕An ...

  3. Android Jetpack简介

    文章目录 Android Jetpack简介 Architecture 架构组件 Foundationy 基础组件 Behavior 行为组件 UI 界面组件 Android Jetpack简介 Je ...

  4. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  5. Android ViewTreeObserver简介-------------转

    Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Object ...

  6. android radiooptions简介

    android radiooptions简介 RILD负责modem和RILJ端的通信,信息分两种:unsolicited和solicited,前者是由modem主动上报的,诸如时区更新.通话状态.网 ...

  7. Android 的简介和体系结构中每个层的功能。

    Android 的简介和体系结构中每个层的功能. 1.简介 Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,主要使用于移动设备. Andro ...

  8. Android字体简介

    Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...

  9. Android OkHttp3简介和使用详解

    一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...

最新文章

  1. Android使用自定义View时:Error inflating class错误的原因。
  2. Entity Framework的启动速度优化
  3. 设计模式之观察者模式学习笔记
  4. anaconda 安装tensorfollow 镜像_镜像也有可能出问题
  5. 【深度学习】逆卷积(Deconvolution)概述
  6. 多线程之线程池的应用
  7. OGEngine基于java支持跨平台的手游开发开源引擎
  8. 鹅厂设计师是如何做设计的?
  9. Linux C 学习 单向链表
  10. 2019我做成的事情
  11. 可以伪装mysql子节点框架是啥_kingbus 架构设计之如何伪装成 MySQL Master 角色
  12. LeetCode-697. 数组的度
  13. 高斯模糊 主色 android,【PS精选案例教程】制作柔美的蓝色数码霓虹字
  14. java http下载_java http下载文件
  15. java学习笔记(22)java输入标签,单选框,复选框,添加文件,文本域,下拉框
  16. java计算机毕业设计培训学校教学管理平台源码+程序+lw文档+mysql数据库
  17. 【面试篇】ConcurrentHashMap1.7和1.8详解对比
  18. Linux sed在某行前一行和后一行添加内容
  19. C语言 现成的创建与终止
  20. MYSQL docker镜像简单安装数据库

热门文章

  1. kong java_KONG网关 — 介绍安装
  2. jdbc连接MySQL后的增、删、改、查
  3. java 删除桌面快捷方式_万能方法用指定浏览器打开桌面上的网页快捷方式
  4. MyEclipse 2015 Windows版下载地址(已更新最新版Stable 3.0)
  5. 计算机组成与系统结构2018,2018年国家电网考试备考计算机组成与体系结构
  6. jquery 使用自适应步骤条
  7. java根据模板导出pdf,并将多个pdf合成一个
  8. C#中Internal关键字的总结
  9. [goa]golang微服务框架学习(三)-- 使用swagger-ui展示API
  10. 2022年大二学生HTML期末作业,网页制作作业(我的校园网站制作)