Android使用Kotlin初体验

Kotlin是Google推荐的Android开发语言,相对于java,kotlin的代码更加简洁。kotlin可以结合anko实现xml布局的功能,可以结合kotterknife,RxKotlin提高开发效率。


配置开发环境

首先安装Kotlin插件,File->Settings…(Ctrl+Alt+S),开发设置页面点击Plugins
Android使用Kotlin初体验_第1张图片
搜索kotlin安装插件
Android使用Kotlin初体验_第2张图片
安装成功后重新启动AS,您会看见下面这些
Android使用Kotlin初体验_第3张图片

新建的时候你会发现多了一些东西
Android使用Kotlin初体验_第4张图片

这样我们就可以创建自己的kotlin程序了。
gradle文件配置有了插件以后都是自动完成的,我们只需要给力的网速下载jar包就行了。
kotlin插件配置gradle方法如下
Android使用Kotlin初体验_第5张图片
然后选择Android with gradle就可以了
如果不想使用插件配置的话,也可以手动配置。需要配置build.gradle文件

buildscript {
    ext.kotlin_version = '1.1.2-4'
    repositories {
        jcenter()
        mavenCentral()//告诉project 使用jcenter库
    }
    dependencies {
        //告诉project使用android提供的2.3.2版本gradle
        classpath 'com.android.tools.build:gradle:2.3.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

//配置所有工程
allprojects {
    repositories {
        jcenter()//所用的project都是使用jcenter库
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
    //配置kotlin文件源码存放目录
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}
dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

在Kotlin的文件中创建我们的第一个页面,下面是插件自动生成的代码

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv.text = "Hello MyKotlin"
        tv.textSize = 20.0f
    }
}

Kotlin中定义类的时候 ‘:’代表继承也就是java中extend
override代表重新父类的方法类似与java中的@Override
方法定义使用fun关键字
(savedInstanceState: Bundle?) savedInstanceState是传入参数,Bundle是参数类型, ‘?’表示这个参数可以为空

build.gradle中如何引入了apply plugin: ‘kotlin-android-extensions’
Kotlin程序中使用xml可以不需要绑定控件,直接使用xml中控件的id

我们给刚刚定义的tv添加一个点击事件

class MainActivity : AppCompatActivity(), View.OnClickListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv.text = "Hello MyKotlin"
        tv.textSize = 20.0f
        tv.setOnClickListener(this@MainActivity)
    }
    override fun onClick(view: View) {
        when (view.id) {
            R.id.tv -> showToast("tv")
            else -> {
            }
        }
    }
}

这里我们遇到了when关键字,这个类似与java中的switch,它比switch更强大,when可以有返回值,可以参数的类型适配。

类修饰符

// 属性修饰符
annotation  //注解类
abstract   //抽象类
final     //类不可继承,默认属性
enum     //枚举类
open    //类可继承,类默认是final的

// 访问权限修饰符
private   //仅在同一个文件中可见
protected //同一个文件中或子类可见
public    //所有调用的地方都可见
internal  //同一个模块中可见
//使用val关键字声明一个常量(只读),声明常量时必须初始化
val a: Int = 1 //显式指定常量的类型
val b = 2  //自动推断类型
val c: Int //声明一个不初始化的常量,必须显式指定类型
//    b = 3  //常量值不可修改,这句代码会报错

//a = 3  //不可以修改常量的值,此句代码会报错

//使用var关键字声明一个变量,变量的值可以修改
var year: Int = 2016 //显式指定变量的类型
var m`这里写代码片`onth = 5 //自动推断变量类型
var day: Int //声明一个不初始化的变量,必须显式指定类型
month = 6 //变量值可以被修改

循环

for (i in 0..4) {
}

泛型

class Box<T>(t: T) {
    var value = t
}

函数

fun add(a: Int, b: Int): Int {
    return a + b
}

定义lambda表达式

//定义
private var mOnItemClickListener: ((ItemBean, Int) -> Unit)? = null

//set方法
fun setOnItemClick(listener: (ItemBean, Int) -> Unit) {
    mOnItemClickListener = listener
} 

//使用
mOnItemClickListener!!.invoke(itemBeanList[pos], pos)

//使用set方法
mAdapter?.setOnItemClick({ bean, _ ->
    //What you want to do
})

未完待续……

你可能感兴趣的:(android)