Kotlin+Anko 你应该尝试的新Android开发方式

老早之前就听说过Kotlin语言,奈何不成熟,也没什么机会用到它,只是用它写过demo而已,最近楼主因为单独一个人负责一个项目,因为项目难度不大,所以就打算用一下Kotlin来开发,因为Kotlin与Java是完美替换的,所以如果出问题不熟也可以马上切换为Java,所以风险不会很大,还有在公司用新技术,最好是请示你们的老大,因为楼主是独立开发且是外包,所以就自己做注意了,好了,不说废话。

初尝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,未尝不是一种提高效率,就楼主自己使用来说,感觉开发速度提高了很多,并且简洁很多了

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值