首先是相关资源
AndroidStudio 3.0 canary 1 官方下载地址
没梯子的点击 百度云下载地址
Google 提供的关于Android O新特性和Kotlin的demo 点击 Kotlin Demo
AndroidStudio 3.0已经完全支持Kotlin了,所以现在你可以方便的新建一个基于Kotlin的Android项目或者在你现有项目的基础上增加Kotlin的代码,你还可以将你的java代码转换为Kotlin。使用Kotlin开发,你可以完全的使用现在AndroidStudio附带的所有工具,像autocomplete,lint,checker,refactoring,debugging等。
这篇文章主要展示如何在AndroidStudio上面使用Kotlin开发。如果你要了解更多关于Kotlin语言的知识,参考:官方推荐的kotlin资源
创建一个支持Kotlin的新项目
想要创建支持Kotlin的项目你只需要在新建项目的向导页面勾选include Kotlin Support
当你新建一个activity
时,它的代码将会以kotlin的形式展现,不过这种只支持phone和tablet的部分模板类,不支持的将会自动的从java代码转为kotlin代码,虽然展现的还是Kotlin代码,但是这些转换过来的Kotlin代码可能不是非常符合Kotlin语言规范的。
在已有项目中添加kotlin支持
如果想在已有项目中添加Kotlin代码,点击FIle > New 选择一个AndroidStudio提供的模板
然后选择kotlin作为source language
点击finish就ok了。
或者你可以点击 File > New >Kotlin File/Class去创建一个通用的类。New Kotlin File/Class页面为不同文件提供了不同的选择类型,但是Kotlin可以自动的方便的切换文件的类型,所以即使你选择一种类型的文件也可以方便的修改为其它类型的。
默认情况下,Kotlin文件试试保存在src/main/java/.. 下的,这样你可以方便的找到Kotlin文件,但是如果你想讲Kotlin和java文件区分,你可以将kotlin文件放在src/main/kotlin/..替代。当你更换Kotlin的文件目录时,你需要在gradle
中如下配置才可以。
android {
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
将现有代码转换为kotlin代码
使用AndroidStudio 3.0,打开一个java文件,选择 Code > Convert Java File to Kotlin File.
或者新建一个kotlin文件,然后把你的java代码粘贴进来,会提示你是否将java代码转换为kotlin,选择yes,但你勾选Don’t show this dialog next time时,下次将会自动转换。
用Kotlin使用android的API
Kotlin适合java完全通用的,所以通过Kotlin调用API会和Java十分相似。
通过Kotlin声明Activity
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity)
}
}
通过Java声明Activity
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
}
}
通过Kotlin表示On-click listener
val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {
...
}
通过Java表示On-click listener
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
通过Kotlin表示item click listener
private val mOnNavigationItemSelectedListener
= BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
mTextMessage.setText(R.string.title_home)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
mTextMessage.setText(R.string.title_dashboard)
return@OnNavigationItemSelectedListener true
}
}
false
}
通过java表示item click listener
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
return true;
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
return true;
}
return false;
}
};