Kotlin say Hello Android

前言

试水Kotlin有一段时间了,纸上得来终觉浅,绝知此事要躬行。所以在继续翻译官方文档之前,先瞅瞅怎么用它进行Android开发。

开发环境

我就比较偷懒了,3.0版本已经集成了Kotlin语言的编译环境。这样省去好多麻烦。

AndroidStudio版本

新建项目

同建立Java版项目一样,只不过新版AndroidStudio已经支持添加Kotlin语言支持
,勾上支持,那么everything is OK!!!
image.png

Android工程结构保持不变,甚至可以同时使用Java、Kotlin两种语言同时开发项目。

新建Activity

选择源文件语言Kotlin,
image.png

最终生成这样的kt文件,注意看logo!
image.png

使用注解

这里我用到了之前开发的一个工具类(请参见:Android自定义权限与动态申请权限

在Java中,我们这样使用:

//申请一个权限
@RequestPermission(Manifest.permission.INTERNET)
//申请多个权限,注意花括号
@RequestPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET})

Kotlin中有两个版本:

//同Java一样
@RequestPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE)
//缺少花括号
@RequestPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)

使用参数名称赋值:

//value是String[],也接收一个权限
@RequestPermission(value = Manifest.permission.CALL_PHONE)
//接收多个权限转String[]
@RequestPermission(value = *arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE))

使用ButterKnife

Java版使用ButterKnife,针对Kotlin JakeWharton大神们特意研发了kotterknife(github地址)。

集成时候比ButterKnife 简单很多,但是功能也少些,在app的build.gradle中添加:

repositories {
    ……
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots/'
    }
}

dependencies {
    ……
    compile 'com.jakewharton:kotterknife:0.1.0-SNAPSHOT'
}

Java版使用,使用前,需要调用BindView.bind(this)方法

@BindView(R.id.activity_main_tv)
TextView tvHello;

Kotlin版使用,不支持使用onclick注解。

val tvHello: TextView by bindView<TextView>(R.id.activity_main_tv)

使用继承和接口

@RequestPermission(value = Manifest.permission.CALL_PHONE)
//自己封装了BaseActivity类,并实现OnClickListener接口
class MainActivity : BaseActivity(), View.OnClickListener {

    //这么看,比使用findViewById 貌似更麻烦些。
    val tvHello: TextView by bindView<TextView>(R.id.activity_main_tv)

    //获取布局,直接对函数进行赋值。
    override fun getContentLayout() = R.layout.activity_main

    override fun initData() {
        //可以同Java一样,调用setText方法,但是Kotlin支持直接使用控件的属性进行赋值。
        tvHello.text = "Hello World";
    }

    override fun initAction() {
        super.initAction()
        //添加点击事件
        tvHello.setOnClickListener(this)
    }


    override fun onClick(v: View?) {
        //使用when替换switch,而且直接使用控件的id属性。
        when (v!!.id) {
            R.id.activity_main_tv -> Toast.makeText(this, "hello Android", Toast.LENGTH_LONG).show()
            else -> Toast.makeText(this, "null", Toast.LENGTH_LONG).show()
        }

    }

    /**
     *申请权限后,拒绝的回调
     */
    override fun onPermissionRefuse(permission: String?) {
        super.onPermissionRefuse(permission)
    }

}

猜你喜欢

转载自blog.csdn.net/flueky/article/details/77933129