Kotlin say Hello Android
Kotlin say Hello Android
http://blog.csdn.net/flueky/article/details/77933129
前言
试水Kotlin有一段时间了,纸上得来终觉浅,绝知此事要躬行。所以在继续翻译官方文档之前,先瞅瞅怎么用它进行Android开发。
开发环境
我就比较偷懒了,3.0版本已经集成了Kotlin语言的编译环境。这样省去好多麻烦。

新建项目
同建立Java版项目一样,只不过新版AndroidStudio已经支持添加Kotlin语言支持
,勾上支持,那么everything is OK!!! 
Android工程结构保持不变,甚至可以同时使用Java、Kotlin两种语言同时开发项目。
新建Activity
选择源文件语言Kotlin, 
最终生成这样的kt文件,注意看logo! 
使用注解
这里我用到了之前开发的一个工具类(请参见:Android自定义权限与动态申请权限
)
在Java中,我们这样使用:
//申请一个权限
@RequestPermission(Manifest.permission.INTERNET)
//申请多个权限,注意花括号
@RequestPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET})
- 1
- 2
- 3
- 4
Kotlin中有两个版本:
//同Java一样
@RequestPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE)
//缺少花括号
@RequestPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)
- 1
- 2
- 3
- 4
使用参数名称赋值:
//value是String[],也接收一个权限
@RequestPermission(value = Manifest.permission.CALL_PHONE)
//接收多个权限转String[]
@RequestPermission(value = *arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE))
- 1
- 2
- 3
- 4
使用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'
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Java版使用,使用前,需要调用BindView.bind(this)方法
@BindView(R.id.activity_main_tv)
TextView tvHello;
- 1
- 2
Kotlin版使用,不支持使用onclick注解。
val tvHello: TextView by bindView<TextView>(R.id.activity_main_tv)
- 1
使用继承和接口
@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)
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
版权声明:本文为博主原创文章,未经博主允许不得转载。

浙公网安备 33010602011771号