前言

第一次接触到Kotlin是在2016年,当时项目有1/3的功能已经用Kotlin进行编码。不管是和Java的交互还是语法的简洁性都已经支持很好。正是因为其语法的简洁性和空指针安全,所以这两年的工作的项目里都有使用Kotlin。不能说Google将其作为Android第一开发语言开发人员就要放弃Java而一意追随。只是作为一门基于JVM新语言,我觉得Kotlin值得大家尝试。


1、. Kotlin in Android Studio

第一次使用Koltin时,当时AS版本在2.2左右,只能通过外部插件的方式在AS中使用。而在AS3.0+以上,Kotlin已经被"捆绑"在AS中。接下来将在AS3.0+版本中介绍Kotlin的使用。

首先创建一个工程,3.0版本以上,此面板会有支持Koltin选项,勾选下一步即可。

这里写图片描述

选择Android版本

这里写图片描述

选择创建一个空的Activity,下一步

这里写图片描述

命名Activity,点击完成
这里写图片描述

OK,到这里,你的第一个Android Kotlin类就已经创建好了。

这里写图片描述

接下来我们看下appbuild.gradle文件中,Kotlin的依赖已经被添加进来。

这里写图片描述

AS以上创建Kotlin文件的步骤还是很简单的,我们观察一下上图gradle中引入了 kotlin-android-extensions,从字面意思看是Kotlin Android的拓展。下面将介绍这个功能。

这里写图片描述

你的项目中是否曾经也出现过这样的代码,一堆的findViewById,写到手抽筋,代码太杂,或许你会说,我们用了ButterKnife,或者已经将findViewById做了封装抽取没有你这样复杂,的确上述方式是简单了很多,但是不管是第三方库还是封装findViewById,结果还是要写控件的Id,以及笔者在开发过程中还遇到过ButterKnife第三方库失效问题。而Kotlin将解放我们的双手,通过Android的拓展功能,获取控件对象无需添加任何代码,也能获取第三方库的效果。让我们一起摇摆(不,是用起来)!


2、Kotlin Android扩展

2-1.配置依赖

如上图所示位置

apply plugin: 'kotlin-android-extensions'

2-2.代码实现

XML布局文件声明一个idtextView文本控件。

<TextView
  android:id="@+id/textView"
  android:layout_width="100dp"
  android:layout_height="100dp"
  android:gravity="center"
  android:textColor="@color/colorWhite"
  android:textSize="16dp" />

代码使用拓展功能


//import kotlinx.android.synthetic.main.<layout>.
//这是导入指定布局中所有组件属性,如布局文件叫activity_main

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
		//直接使用id属性给控件设置值,告别findViewById
        textView.text = "Hello Kotlin"
    }
}

看了上面的操作后,是不是觉得Kotlin对于代码真的简约,我们在使用的过程中尽可能的避免控件的属性重复,尽管Android资源加载对两个相同id的控件也会分配不同的资源id,但是尽可能的不重复可以避免很多的意外。Kotlin拓展功能还有几个实验功能目前还没有正式开放,待正式开放时,将会把常用的功能在这里作补充。


3、Kotlin Anko库

Anko库,可以让Android的开发更加的简单,代码清晰易读,它主要由几个组成方式:

Anko Commons:intents,对话框,日志等帮助器
Anko Layouts:动态Android布局
Anko SQLite: Android SQLite的DSL和分析器集合
Anko Coroutines:基于kotlinx.coroutines库的实用程序

这里对Anko库中几个常用的库和帮助类做简单的介绍,很多功能目前在开发中的实用性不是很高。


3-1.intents用法

3-1-1、Kotlin中跳转Activity基本写法


val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("isNormal", true)
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)

3-1-2、Anko Intents写法

startActivity(intentFor<SecondActivity>("isNormal" to true).singleTop())

3-1-3、Anko Intents不带标志位的写法

startActivity<SecondActivity>("isNormal" to true)

3-2、Anko Layouts

在代码中进行动态布局,从开发习惯来说,这种写法对于目前安卓开发者来说很不"友好"。毕竟在XML中可以直接看到视图。所以这个功能点暂时不推荐使用,但是萝卜白菜各有所爱,有喜欢这种开发方式的同学可以尝试一波。

//纵向布局
verticalLayout {
    //动态图片声明  lparams:设置view参数
     imageView(R.mipmap.yww_1).lparams(width = dip(200), height = dip(400)) {

     }

     //EditText 声明 ,参数是EditText的值
     val name = editText("I am EdiText")
           
     //Button 声明
     button("Akon Button") {
     //Button 点击事件
     onClick {
           toast("Hello,${name.text}")
      }
      //Button 参数设置
      }.lparams(width = wrapContent, height = wrapContent) {
         horizontalMargin = dip(50)
            topMargin = dip(30)
     }
}

上面代码的执行效果图:

这里写图片描述


总结

本篇介绍了在AS中创建Kotlin的步骤,以及Kotlin For Android的拓展功能和Anko功能,下篇将正式开始我们的Kotlin之旅。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐