kotlin是一门基于jvm的编程语言,最近进行了关于kotlin和 anko的研究。并且结合现在的APP设计模式,设想了初步的开发方式。并且准备应用在新的项目中。
Kotlin和anko
Kotlin是大名鼎鼎的JB公司开发的jvm语言,官网地址为;http://kotlinlang.org/
官网的介绍为:
Statically typed programming language for the JVM,AndroID and the browser
Kotlin的设计思想非常的轻量,尽可能的去复用java代码,不到万不得已的时候,一般不会自己去实现一套大而全的库。这使得Kotlin非常的轻量,集成到AndroID的project并不会很明显的影响最终的打包大小。
关于Kotlin的优点,自己总结了几点:
1,和Java的无缝调用,这在初期不需要投入非常大的精力,即使遇到搞不定的坑,也不必担心影响业务开发的进度,直接换成java就好了。
2,大量的语法糖,使得代码非常的简洁,熟悉之后的开发效率也要高于Java。例如扩展函数,简单的封装再也不需要写一大堆Utils工具类,直接灵活的给某些类添加扩展方法就可以了。例如:
inline fun Activity.toast(message : Int) { Toast.makeText(this,message,Toast.LENGTH_SHORT).show() }
这样在Activity类中就多出了一个toast方法,实际上在anko中,也有大量已经写好的扩展方法,可以直接使用DSL语法去写UI。再例如when语句的写法:
when(x) {1-> {}2-> {}}
很明显,相比传统的Java写法,使用anko后,语言更加简洁。
switch(x) {case 1: break;case 2: break;default: break;}
3,更加安全,Kotlin似乎比较想消灭空引用,在Java中,调用一个null对象会抛出NullPointException,在Kotlin中,不能为空的对象,例如String对象,会写成:
var a: String? = "abc"
4,良好的生态环境和开发社区。Kotlin目前还是属于比较新的技术,很多人也都在尝试它的有点。包括Rx系列也出了RxKotlin,既RxJava的Kotlin版
Kotlin和Anko使用
Anko的github地址为https://github.com/Kotlin/anko。集成anko的步骤如下:
首先在project的build文件加入如下代码:
dependencIEs { classpath 'com.androID.tools.build:gradle:2.2.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" //这是需要你加入的 }allprojects { repositorIEs { jcenter() maven {url 'https://dl.bintray.com/jetbrains/anko'} //这是你需要加入的 }}
然后,在你app moudle的build文件里面添加依赖:
compile "org.jetbrains.anko:anko-sdk15:0.9.1" // So here it's 15 too compile "org.jetbrains.anko:anko-appcompat-v7:0.9.1" compile "org.jetbrains.anko:anko-design:0.9.1" compile "org.jetbrains.anko:anko-recyclervIEw-v7:0.9.1"
根据kotlin的优势,选择使用anko进行编写,不使用xml进行编写。
这样的好处在anko的github README文件中是这样描述的:
不安全 没有空安全 迫使你为了每一个布局去写很多相似甚至重复的代码 XML在设备上浪费cpu时间和电量(应该是需要进行解析的原因) 不允许代码重用(没有完全理解,可能说的不是include标签而是自定义的layout) 至于Contract接口以及实体对象,可以直接使用Kotlin编写,第一为了语法简洁,第二不用写一大堆setter/getter方法。具体的,首先编写MainActivity类,进行UI展示和事件等逻辑。
class MainActivity : AppCompatActivity(),MainContract.VIEw { overrIDe fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) }}
接下来在onCreate中编写ui布局,登录布局比较简单,就是2个输入框和一个按钮,当然为了试用多点的常见控件,我在最上方添加了Toolbar。
relativeLayout { var mToolbar = toolbar(R.style.Base_themeOverlay_AppCompat_Dark_Actionbar) { ID = ID_TOolbar Title = "登录" backgroundcolor = ContextCompat.getcolor(this@MainActivity,R.color.colorPrimary) popuptheme = R.style.Base_themeOverlay_AppCompat_light inflateMenu(R.menu.main) setNavigationIcon(R.mipmap.img_back_white) onMenuItemClick { menuItem -> val itemID = menuItem!!.itemID when (itemID) { R.ID.menu_main -> { toast(R.string.main_toast) } } false } lparams { wIDth = matchParent height = wrapContent } setNavigationOnClickListener { finish() } } var mUserEdit = editText { ID = ID_USER_EDIT hint = "请输入同户名" maxlines=1 lparams { wIDth = matchParent height = wrapContent margin=dip(8) centerInParent() } } var mPsdEdit = editText { ID= ID_PSD_EDIT hint="请输入密码" maxlines=1 maxWIDth = 16 lparams { wIDth = matchParent height = wrapContent margin = dip(8) below(ID_USER_EDIT) } } var mbutton = button("登录") { ID= ID_BTN_LOGIN onClick { var username = mUserEdit.text.toString() var password = mPsdEdit.text.toString() mPresenter!!.login(username,password) } lparams { wIDth= matchParent height = wrapContent margin = dip(8) below(ID_PSD_EDIT) } } }
代码中的ID使用了常量,在Kotlin中没有static的概念,但是有一个companion object(伴随对象)可以模拟实现类似static的功能。
companion object static { val ID_TOolbar: Int = 1 val ID_USER_EDIT: Int = 2 val ID_PSD_EDIT: Int = 3 val ID_BTN_LOGIN: Int = 4 }
可以看到,这样编写UI的代码非常的简洁。而且可读性非常的高。相信对XML写布局比较熟悉的同学都能看懂这里面代码的含义。同时官方还出了一个AndroID Stduio插件,叫做anko SDL prevIEw。可以很方便的让开发者预览编写的效果。接下来按照MVP的思想, 编写BaseVIEw和BasePresenter接口。
interface BaseVIEw<T> { fun setPresenter(presenter: T)}
interface BasePresenter
使用Kotlin编写MainContract接口,这个接口建立起了V层和P层的通信。
interface MainContract { interface VIEw : BaseVIEw<Presenter> { fun login() fun loginNull() } interface Presenter : BasePresenter { fun login(username: String,password: String) }}
使用Java编写P层代码。
public class MainPresenter implements MainContract.Presenter { private MainContract.VIEw mVIEw; public MainPresenter(MainContract.VIEw vIEw) { mVIEw = vIEw; mVIEw.setPresenter(this); } @OverrIDe public voID login(String username,String password) { if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { mVIEw.loginNull(); return; } mVIEw.login(); }}
这里只是模拟了下登录的逻辑,并没有去真的实现一个登录
回到MainActivity,在这里加入我们的代码。
var mPresenter : MainContract.Presenter? = null
overrIDe fun setPresenter(presenter: MainContract.Presenter) { mPresenter = presenter!!}
实现V层应该实现的回调方法:
overrIDe fun loginNull() { toast("用户名密码不得为空")}overrIDe fun login() { toast("执行登录逻辑...")}
到这里,我们就完成了Kotlin和anko开发AndroID的实例,如果想要更加熟练的使用,还需要多加练习。
附:Anko的github地址为https://github.com/Kotlin/anko
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的详解Kotlin和anko融合进行Android开发全部内容,希望文章能够帮你解决详解Kotlin和anko融合进行Android开发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)