学习kotlin,应该都多多少少的接触anko的用法

什么是anko?其实就是颠覆了我们平常写布局的方式,如果你学习过flutter,那你应该了解flutter的布局方式,跟android最大的不同就是没有xml布局,那么anko同理,就是用代码更快、更方便的实现布局效果

优点

我们平常的android写法中,都是通过去解析xml来实现布局,但是使用了anko,就是可以通过代码实现布局的方式,从而减少解析xml的时间

添加依赖

Anko 的 Github 仓库是: https://github.com/Kotlin/anko

在 Github 仓库的 README 上关于如何添加依赖已经写的很详细了,把要添加的选择性复制粘贴就好了。

Anko 包括四个部分内容:

  • Anko Commons

    • 轻量级的一些帮助类,比如 intent,dialog,logging 等等,其实就是对安卓一些类:Activity、Fragment、Intent 等添加扩展函数。
  • Anko Layouts
    • 动态布局用的最主要的库,将许多 Android 的控件 View 转换成了 Anko 加载的形式。
    • 由于 Android 还有其他的控件库,因此 Anko 也对那些库进行了拓展支持,可以选择添加对应的依赖库。
    • 当然,还可以根据需要对自定义 View 进行改造,让它们也支持 Anko 加载的形式。
  • Anko SQLite
    • 用于 Android SQLite 数据库的查询的库
  • Anko Coroutines
    • 基于 kotlinx.coroutines 协程的一个工具库

创建布局

class TestAnkoActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)relativeLayout {button("中间按钮") {textSize = sp(20).toFloat()onClick {//点击时间}}.lparams {//居中显示  centerInParent()}}}
}

写过代码的应该都可以看懂上面的代码,其实就是将xml的方式完全改成代码的形式,其实在我们以前的java写法中也是可以通过代码直接创建view的,但是只是我们用的很少,kotlin的这个anko库就是更加简单的简介的实现了这一功能。

父布局是relativeLayout  ,并把它添加到了 Activity 中。

在这里,并没有使用常见的 setContentView 方法,这是因为 Anko 会自动将布局界面 View 设置到 Activity 中。

relativeLayout代码块就是 Anko 的主要使用方法。

relativeLayout 作为一个容器,在里面添加了一个 buttonbutton 控件的第一个大括号里设置了它的一些属性和事件,在 lparams 大括号里设置了它在相对于容器的一些参数。

就是这样简单的写法完成了界面布局,如同写 xml 文件一样,只要在父容器里面按照排列写好子控件的参数和位置就好。

如果接触过flutter,其实可以很好理解这种写法,所以建议读者有机会可以学习一下flutter。

使用 AnkoComponent 接口创建界面

除了直接在 Activity 里面写布局,还可以使用 AnkoComponent 接口创建布局,这样就可以将界面代码和 Activity 的代码分离了。

在flutter 中,我们把布局可以单独剥离出来,同理,在kotlin中也可以实现同样的逻辑,两者实现方式也很像

class TestAnkoActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {super.onCreate(savedInstanceState, persistentState)AnkoActivityUI().setContentView(this)}
}class AnkoActivityUI : AnkoComponent<MyActivity> {override fun createView(ui: AnkoContext<MyActivity>) = with(ui) {verticalLayout {val name = editText()button("我是anko布局") {onClick { ctx.toast("anko, ${name.text}!") }}}}
}

这里使用到了 Kotlin with 的语法糖,使用 with,则返回的是最后一行的内容,正好 verticalLayout 就是最后一行的内容。

也可以把它转换一下,使用 apply 的语法糖,最后返回的调用该方法的对象,再接着返回该对象的 view 就好了。

class TestAnkoActivityUI : AnkoComponent<MyActivity> {override fun createView(ui: AnkoContext<AnkoActivity>) = ui.apply {verticalLayout {val name = editText()button("anko布局") {onClick { ctx.toast("Hello, ${name.text}!") }}}}.view
}

缺点

在 XML 中能够设置的控件属性更多,更精确的控制布局状态,而 Anko 在构建简单界面的时候才显得快速、便捷。

而且 Anko 支持的控件有限,加载自定义的控件还得添加额外的代码,在更复杂的应用中应该不太会广泛的使用。

当然,对于写习惯了布局的Android开发者来说,可能也一时接受不了这种写法,但是在简单页面中,这种构建速度还是很快的,值得上手一试

kotlin Anko的实际用法相关推荐

  1. Kotlin 3. Kotlin 特殊符号的用法:双感叹号!!,问号?,双冒号::

    一起来学Kotlin:概念:3. Kotlin 特殊符号的用法:双感叹号!!,问号?,双冒号:: 这里介绍 Kotlin 特殊符号的用法,包括:双感叹号!!,问号?,双冒号::. 文章目录 一起来学K ...

  2. Kotlin Suppress 的非常规用法

    在 Java 中,有个叫 SuppressWarnings 的注解,用于忽略特定的编译器警告.Kotlin 中也有一个类似功能的注解,叫做 Suppress,本文主要讲讲这个注解有什么用. 常规用法 ...

  3. 梳理学习Kotlin,Function的用法

    示例: main函数 fun main(args: Array<String>) {} 完整函数 fun fib(n: Int): Long {return if (n < 2) 1 ...

  4. kotlin学习笔记——扩展函数(anko)和网络请求

    anko是一个强大的库,主要目的是替代以前xml的方式来使用代码生成布局.除此之外,也包含了很多有帮助的函数和属性.本章因为内容需要先介绍其中的扩展函数,其他的我们后面章节再来介绍. anko的git ...

  5. kotlin框架Anko的使用及常用的项目配置

    kotlin框架Anko的使用及常用的项目配置 之前的几篇文章重复的讲了一些项目的基础配置,这一节就让我们把之前的那些抽取出来,单独的写一篇短文,之后的文章我们就直接使用这个配置就可以啦 创建我们的项 ...

  6. 《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发

    第13章 使用 Kotlin 和 Anko 的Android 开发 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: ...

  7. 《Kotlin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发

    2019独角兽企业重金招聘Python工程师标准>>> 第13章 使用 Kotlin 和 Anko 的Android 开发 13.1 什么是 Anko? Anko (https:// ...

  8. Kotlin/DSL(Anko),原汁原味Kotlin开发Android---Activity Fragment与AnkoUI分离,强大的复用,更加便捷的开发

    /写在前面 翻开自己的CSDN,已经很久很久没有活动了,最近的关于PDF签章的博客还是16年写的.将近年关,工作内容阶段性告一段落,终于有时间写一下自己的东西. 废话少说,说说Kotlin.kotli ...

  9. kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?

    本文作者 作者:kotlon 链接: https://www.jianshu.com/p/dcf6cd7c59a3 本文由作者授权发布. 1kotlin 优势 kotlin 在 17 年 google ...

最新文章

  1. LISP 圆孔标记_晓东CAD家园-论坛-A/VLISP-获取当前标注样式-;;希望大家来完善它 - Powered by Discuz!...
  2. Xamarin iOS开发实战(内部资料)
  3. Java虚拟机中的栈和堆
  4. c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放
  5. AngularJS+Jersey下载excel
  6. 《javascript高级程序设计》读书笔记1
  7. Choose and divide(唯一分解定理)
  8. 语言随机效应模型_R语言LME4混合效应模型研究教师的受欢迎程度
  9. 打印机加粉出现的问题:打印机m7206清零
  10. 客户档案管理,批发零售进销存收银财务一体管理软件
  11. python:IndentationError:expected an indented block
  12. (LINPACK)HPL测试成功步骤整理
  13. Unity - RectTransform详解
  14. 解密微信拼团电商:拼多多
  15. ransomware(假的勒索病毒)逆向分析
  16. 约瑟夫生者死者游戏:有N个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难;无奈,大家只得同意这种办法,并议定N个人围成一圈,由
  17. 伺服电机(servo motor)
  18. Linux在加载模块时报insmod: error inserting xxx.ko -1 File exists这个错
  19. ArcGis For JavaScript API Drawing Tool (绘图工具又称框选地图)
  20. 怎么才能提升微信小程序排名

热门文章

  1. 永善县黄华镇大永高速通车了
  2. 无光驱,硬盘安装XP完整原版
  3. linux ps aux tty,linux ps命令中的tty表示什么意思?
  4. 有帅帅帅哥看得懂吗?它是延时用的
  5. 生日蛋糕(noi99)
  6. Linux下串口编制【转】
  7. 如何零基础学习法语,陈家桥法语零基础入门学习
  8. css加载中,请稍后....demo示例(整理)
  9. 这个macOS神器,让爱怀旧的人直呼:“爷青回!”
  10. Maya2022和C4D哪个更好用?