Kotlin+Anko 你应该尝试的新Android开发方式
2016-12-28 18:27
429 查看
老早之前就听说过Kotlin语言,奈何不成熟,也没什么机会用到它,只是用它写过demo而已,最近楼主因为单独一个人负责一个项目,因为项目难度不大,所以就打算用一下Kotlin来开发,因为Kotlin与Java是完美替换的,所以如果出问题不熟也可以马上切换为Java,所以风险不会很大,还有在公司用新技术,最好是请示你们的老大,因为楼主是独立开发且是外包,所以就自己做注意了,好了,不说废话。
初尝Kotlin+Anko,我发现Kotlin写起来很舒服,首先在我们的项目中配置Kotlin和Anko环境,在项目的build.gradle中
在模块的build.gradle中
就这样我们配置好了Kotlin和Anko的环境了,接下来我们就能使用了:
注意,因为Kotlin是空安全的,如果变量有可能是null,我们需要先用?显示声明变量可以为null,然后在别的地方使用时要用变量+!!来引用,即
Kotlin中方法的返回值是相当于定义变量一样用:类型。
就是这种一大堆,而Kotlin中数据类直接这样写:
是不是很方便,这种写法是Kotlin初始化的方法一种形式,还有一种不是写在首行而是写在init{}块中,Kotlin允许有多个初始化方法,但是其它都是副初始化方法,最后都会指向主初始化方法。
Kotlin还有很大新特性,具体的可以去官网查看demo,我这里只是大概列出一些普通的特性,
Anko是一个新的布局框架,我们在Android开发中布局都是写在xml文件中,每次都要写一大堆布局代码,而且不能复用,所以Android的布局一般都是很麻烦会花费很多时间,并且Android本身解析xml文件也需要时间,而Anko不会,Anko使用的是DSL,领域相关语言,开销很小,所以可以提高我们APP的绘制效率以及性能。
下面用Anko布局一个登陆界面,有用户名框,密码框,密码
这样就是我们的布局了,简洁很多,并且复用,我们控件的布局是写在lparams中,Anko的扩展性也很强,就是我们自定义的控件也能放在Anko中使用例如:
在这里我们自定义了一个控件叫MyRecyclerView,我们新建一个.kt文件,然后输入上面的代码,我们就可以在app中使用这个控件了
这就是Anko的扩展性,而且扩展性还很强,我们可以用两个控件直接扩展成一个控件:
这样就是把两个控件简单的合成一个,适用于一些控件布局是一样且经常用的,这样就可以直接当成一个控件来使用。
Anko和Kotlin还有更多好玩的特性,我觉得使用这种方式来开发Android,未尝不是一种提高效率,就楼主自己使用来说,感觉开发速度提高了很多,并且简洁很多了
初尝Kotlin+Anko,我发现Kotlin写起来很舒服,首先在我们的项目中配置Kotlin和Anko环境,在项目的build.gradle中
buildscript { ext.kotlin_version = '1.0.4' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
在模块的build.gradle中
apply plugin: 'kotlin-android' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile 'org.jetbrains.anko:anko-sdk15:0.9' // sdk19, sdk21, sdk23 are also available compile 'org.jetbrains.anko:anko-support-v4:0.9' // In case you need support-v4 bindings compile 'org.jetbrains.anko:anko-appcompat-v7:0.9' // For appcompat-v7 bindings compile 'org.jetbrains.anko:anko-recyclerview-v7:0.9' // For appcompat-v7 bindings compile 'org.jetbrains.anko:anko-design:0.9'
就这样我们配置好了Kotlin和Anko的环境了,接下来我们就能使用了:
变量
在java中我们声明一个变量时,需要先声明类型再声明变量,而Kotlin不用,而是跟js一样统一用var来修饰变量,用var修饰的变量值是可变的,如果你想声明一个不可变的变量即常量,可以用val关键字来形容,例如:var a = "string" val b = "final"
注意,因为Kotlin是空安全的,如果变量有可能是null,我们需要先用?显示声明变量可以为null,然后在别的地方使用时要用变量+!!来引用,即
var a : Int ?= null a!!.toString()
方法
Kotlin中方法的声明统一用关键字fun来形容,例如:fun A(a:Int){}//带参 无返回值 fun A(){}//不带参 无返回值 fun A(a:Int) : Int{return a}//带参 有返回值
Kotlin中方法的返回值是相当于定义变量一样用:类型。
data class
数据类是我觉得最简单方便的,在java中我们定义一个数据类bean时要写成这样:class A{ private String a; //set方法 //get方法 }
就是这种一大堆,而Kotlin中数据类直接这样写:
data class A(val x: Double, val y: Double)
是不是很方便,这种写法是Kotlin初始化的方法一种形式,还有一种不是写在首行而是写在init{}块中,Kotlin允许有多个初始化方法,但是其它都是副初始化方法,最后都会指向主初始化方法。
Kotlin还有很大新特性,具体的可以去官网查看demo,我这里只是大概列出一些普通的特性,
Anko是一个新的布局框架,我们在Android开发中布局都是写在xml文件中,每次都要写一大堆布局代码,而且不能复用,所以Android的布局一般都是很麻烦会花费很多时间,并且Android本身解析xml文件也需要时间,而Anko不会,Anko使用的是DSL,领域相关语言,开销很小,所以可以提高我们APP的绘制效率以及性能。
下面用Anko布局一个登陆界面,有用户名框,密码框,密码
relativeLayout { editText { id = PHONENUMBER_ID }.lparams (width = matchParent,height = wrapContent){ centerHorizontally() } editText { id = PASSWORD_ID inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD filters = myFilters }.lparams(width = matchParent,height = wrapContent) { below(PHONENUMBER_ID) } button(ctx.getString(R.string.btn_login)){ id = LOGIN_ID }.lparams (width = wrapContent,height = wrapContent) { below(PASSWORD_ID) centerHorizontally() } }
这样就是我们的布局了,简洁很多,并且复用,我们控件的布局是写在lparams中,Anko的扩展性也很强,就是我们自定义的控件也能放在Anko中使用例如:
inline fun ViewManager.myRecyclerView(theme: Int = 0) = myRecyclerView(theme) {} inline fun ViewManager.myRecyclerView(theme: Int = 0, init: MyRecyclerView.() -> Unit) = ankoView({ MyRecyclerView(it) }, theme, init)
在这里我们自定义了一个控件叫MyRecyclerView,我们新建一个.kt文件,然后输入上面的代码,我们就可以在app中使用这个控件了
val myRecyclerView = myRecyclerView { layoutManager = LinearLayoutManager(ctx, LinearLayoutManager.VERTICAL, false) }.lparams(width = matchParent, height = wrapContent) myRecyclerView.setEmptyView(textView ("我是空数据的时候显示") {}) myRecyclerView.setEmptyViewListener{ v-> Log.i("TAG","OOOOOOOO空数据") }
这就是Anko的扩展性,而且扩展性还很强,我们可以用两个控件直接扩展成一个控件:
fun _LinearLayout.smsCode(name: String): EditText { var a : EditText? = null linearLayout { orientation = LinearLayout.HORIZONTAL textView("$name:") { textSize = 18f }.lparams(width = dip(50) ,height = dip(50)) { } a = editText().lparams (width = dip(50) ,height = dip(50)){ } } return a!! }
这样就是把两个控件简单的合成一个,适用于一些控件布局是一样且经常用的,这样就可以直接当成一个控件来使用。
Anko和Kotlin还有更多好玩的特性,我觉得使用这种方式来开发Android,未尝不是一种提高效率,就楼主自己使用来说,感觉开发速度提高了很多,并且简洁很多了
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件