## **开始在Android上使用Kotlin** 在Android Studio 3.0中全面支持Kotlin,所以创建一个全新包含Kotlin文件的项目,向你当前的项目中添加Kotlin文件,将Java语言代码转换为Kotlin非常简单。你可以在你的Kotlin代码上,使用Andorid Studio现存所有的工具,例如自动补齐,lint检查,重构,调试等等。 这章节教你如何在Android Studio中使用Kotlin。更多关于Kotlin语言的信息,查看Resources to Learn Kotiln。 ### **使用Kotlin创建一个新的项目** *** 在新项目中使用Kotlin,仅仅要求在创建新项目的引导中一个额外的点击: 1. 在Android Studio中,点击File>New>New Project。或者如果你仅仅打开了Android Studio,看见了Welcome to Android Studio窗口,点击Start a new Android Studio project。 2. 在一个窗口,选中Include Kotlin support。这是唯一的不同。 3. 点击Next和继续完成向导,直到你操作完毕。 ![](https://box.kancloud.cn/3fe4d831b5731fc4894995eccc20db0b_1600x1344.png) 当你选择一个Activity模板的时候,它将会提供Kotlin代码。现在,仅仅一些Phone and Table类型的模板提供“地道”的Kotlin代码。其余的则从Jav模板自动转换成Kotlin—你仍然可以得到Kotlin代码,但是一些代码可能没有使用Kotlin的最好语言功能。 和Java文件一样,Kotlin文件被保存在src/main/java/目录下。 ### 向已有的项目添加Kotlin *** 如果你向现有的项目中添加Kotlin代码,只需要点击File>New并且选择各种Andorid模板的一个。如果你没有在这个菜单中看见模板列表,首先打开Project窗口,然后选择你的app模块。 ![](https://box.kancloud.cn/140724c6b0942fb1b4c343d169993a37_1606x1782.png) 在出现的向导中,选择Kotlin为Source language。 ![](https://box.kancloud.cn/6b274384ec0ca07faaefb25f2e8603b2_1600x1344.png) 持续完成向导,直到你操作完毕。 或者,你可以点击File>New>Kotlin File/Class来创建一个基本文件。这个New Kotlin File/Class窗口提供了各种文件类型的选择,但是你选着哪一个不重要,因为Kotlin会自动改变文件类型,如果你稍后改变了声明类型。 默认的,新的Kotlin文件被保存在src/main/java/。你可能很容易在一个目录下同时看见Kotlin和Java文件。但是如果你更喜欢从你的Java文件中分开Kotlin文件,你可以将Kotlin文件放在/main/kotlin/目录下替代。如果你这样做了,然后你需要在你的sourceSets配置中包含这个目录。 ~~~ android { sourceSets { main.java.srcDirs += 'src/main/kotlin' } } ~~~ ### **将现有的Java代码转换成Kotlin代码** *** 在Andorid Studio 3.0中,打开一个Java文件,然后选择Code>Convert Java File to Kotlin File。 或者,创建一个新的Kotlin文件(File>New>Kotlin File/Class),然后粘贴你的Java代码到这个文件中——当被提示的时候,点击Yes来将代码转换成Kotlin。你可以选择Don't show this dialog next time,它会使得将Java代码片段放到你的Kotlin文件中更简单。 ![](https://box.kancloud.cn/f4d783475c7949eb32981904c38e453d_1062x238.png) ### **用Kotlin调用Android APIs** *** Kotlin提供了完整调用Java语言的操作,所以调动Android APIs看起来非常像Java代码。除非你现在能使用Kotlin的语法功能兼容这些方法调用。 这里有几个例子,和用Java语言实现的相同代码对比,它们看起来像使用Kotlin调用Andorid APIs。 **Declare Activity in Kotlin** ~~~ class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity) } } ~~~ **Declare Activity in Java** ~~~ public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); } } ~~~ **On-click listener in Kotlin** ~~~ val fab = findViewById(R.id.fab) as FloatingActionButton fab.setOnClickListener { ... } ~~~ **On-click listener in Java** ~~~ FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ... } }); Item click listener in Kotlinprivate 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 } ~~~ **Item click listener in Java** ~~~ 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; } }; ~~~ 想学习更多关于Kotlin语言的知识,请查阅Resources to Learn Kotlin。