摘要:在使用kotlin开发android应用的过程中,anko这个框架能够帮助你省很多的事,让开发的过程变的更加轻松、简单。在这篇文章中,我将向大家讲述anko中几大模块(Anko Commons、Anko Layouts、Anko SQLite、Anko Coroutines),以及它们基本的使用方式。
Commons
依赖:
compile "org.jetbrains.anko:anko-commons:$anko_version"
说明:
Commons模块主要对一些常用代码的使用形式进行了简化,例如对话框(Dialog),意图(Intent)和日志(Logging)等等。
使用:
一、对话框(Dialog):toast,警告对话框(alert),多选对话框(selector),进度对话框(progressDialog)
toast("hello kotlin") longToast("hallo.... kotlin") alert("this is message","this is title"){ yesButton { //do something... } noButton { //do something... } }.show()
val langList= listOf<String>("Java","Kotlin","Python","Swift") //多选框 selector("this is title",langList){ dialogInterface, i -> toast("you like lang is ${langList[i]}") } val dialog=progressDialog("this is message","this is title") dialog.show()
二、意图(Intent):使得活动之间的切换变的更加简洁。
//需要使用到Flag startActivity(intentFor<MainActivity>( //需要通过Intent传递的数据 "id" to 5, "name" to "feint" //Intent的Flag ).singleTop()) //不使用Flag startActivity<MainActivity>("id" to 5)
三、日志(Logging):简化了日志的写法,不用自己去定义TAG了。
info("hello") debug("my God") warn(55555) verbose { "A Kotlin world" }
注意:如果你已经加入了Anko的Layout
依赖,就没必要在加入这个依赖了,以上内容都包含在了Layout模块中。
Coroutine
依赖:
compile "org.jetbrains.anko:anko-coroutines:$anko_version"
说明:
Coroutine模块方便你执行异步任务。原来Android中的AsyncTask用起来的确是有些麻烦,添加了这个模块后,执行异步任务变的异常的简单。
使用:
async(UI){ //在这里写执行异步任务之前的操作 val data=bg{ //执行异步任务 } data.await() //在这里写异步任务执行完成之后的操作}
辅助函数bg的返回值是Deferred<T>
,其中的T的类型是你在bg
后面的lambda表达中所返回的类型。Deferred执行await
后的返回值的类型为T。
Layout
依赖:
compile "org.jetbrains.anko:anko-sdk25:$anko_version"compile "org.jetbrains.anko:anko-appcompat-v7:$anko_version"compile "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"compile "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
说明:
Anko的Layout模块让我们能够使用DSL来进行布局。咱使用了一段时间后感觉,对于一些经常使用到的布局使用DSL来定义,可以方便复用,这一点要比xml好。不过当布局较为复杂时,使用DSL的体验听糟糕的,特别是还不能对布局效果进行预览(尽管官方出了相应的插件,蛋疼的时它要求的Android studio的最低版本比mac上的最新版本还要高,除非使用3.0预览版)。
使用:
一、XML和DSL混合使用
setContentView(R.layout.activity_kotlin)val flMain = find<FrameLayout>(R.id.fl_main) flMain.linearLayout { orientation = LinearLayout.HORIZONTAL val name = editText() button("Say Hello") { onClick { toast("Hello, ${name.text}!") } //layoutparams }.lparams { gravity = Gravity.CENTER width = dip(100) height = dip(45) } }
二、仅使用DSL
linearLayout { orientation = LinearLayout.HORIZONTAL val name = editText() button("Say Hello") { onClick { toast("Hello, ${name.text}!") } //layoutparams }.lparams { gravity = Gravity.CENTER width = dip(100) height = dip(45) } }
SQLite
依赖:
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
说明:
SQLite模块,在创建数据表的时候,的确十分的强大。不过在查询的时候将数据行解析成对象的能力并不是十分突出,比使用Jackson将Json转换为对象的使用体验要差很多。但总体来说在增、删、改、查上还是要Android原生的那些方法要方便不少。
使用:
一、创建SQLite的帮助类
helper-1
helper-2
二、插入数据
insert
三、查询数据
select
结语:Anko框架的确是一个十分好用的东西,充分利用了Kotlin语法上的优势,让原来使用Java编写的冗杂的Android代码变的更加简洁。可能有人会说语法糖使用多了,代码的可读性就变差了。其实我觉得这完全是一个习惯问题,当你习惯了这充满语法糖的代码后,反而会觉得看起来更加舒适。