linwoain的个人blog

知我者谓我心忧,不知我者谓我何求

0%

kotlin一些小知识点

view绑定

使用插件,在appbuild.gradle

1
apply plugin: 'kotlin-android-extensions'

定义一个布局并设置id

1
2
3
4
5
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="show"/>

在kotlin文件中使用此控件

1
btn.setOnClickListener { Toast.makeText(this,"Hello",Toast.LENGTH_SHORT).show() }

btn控件可直接初始化,无需绑定

Anko库

Anko库是kotlin开发的一款用来替代xml布局的dsl语法
添加所有依赖

1
2
3
dependencies {
compile "org.jetbrains.anko:anko:$anko_version"
}

或者指定某些模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dependencies {
// Anko Commons
compile "org.jetbrains.anko:anko-commons:$anko_version"

// Anko Layouts
compile "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
compile "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

// Coroutine listeners for Anko Layouts
compile "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
compile "org.jetbrains.anko:anko-appcompat-v7-couroutines:$anko_version"

// Anko SQLite
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
}

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)

verticalLayout {
button("Ok") {
onClick { toast("Click OK") }
}
button("Cancel"){
onClick {toast("Click Cancel")}
}
}

}

kapt

在kotlin代码中使用编译器注解框架,不能使用原来的AnnotationProcessor,而要使用kapt代替

1
2
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'
1
2
kapt 'com.jakewharton:butterknife-compiler:8.6.0'
kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1'

同时,参数配置从defaultConfig下的

1
2
3
4
5
6

javaCompileOptions {
annotationProcessorOptions {
arguments = ['eventBusIndex': 'org.greenrobot.eventbus.EventBusIndex']
}
}

挪到最外层的

1
2
3
4
5
6
7
8

kapt {

arguments {
arg("eventBusIndex", 'org.greenrobot.eventbus.EventBusIndex')
}
}