在Android上開始學(xué)Kotlin
Android Studio 3.0完全支持Kotlin怪瓶,所以它很容易用Kotlin文件來創(chuàng)建新項目炼吴,在你的已有項目中添加Kotlin文件呛讲,并且,可以將java代碼轉(zhuǎn)換成Kotlin享钞。然后号胚,你能通過Kotlin代碼來使用所有Android Studio現(xiàn)有的工具,比如自動補(bǔ)全酸役、lint檢測住诸、抽取、調(diào)試等等涣澡。這一頁展示你改如何在Android Studio上開始學(xué)習(xí)kotlin贱呐。學(xué)習(xí)更多關(guān)于Kotlin語言,請看更多學(xué)習(xí)
使用Kotlin來創(chuàng)建一個新項目
使用Kotlin來創(chuàng)建新項目只需要在新建項目想到上多點擊一下:
- 在Android Studio中點擊 File>New>New Project . 如果你剛剛打開Android Studio入桂,會看到 Welcome to Android Studio 窗口奄薇,只需要點擊 Start a new Android Studio project 。
- 在彈出的第一個界面中抗愁,選中 Include Kotlin support 馁蒂。這就是唯一的不同點呵晚。
- 點擊 Next ,并且繼續(xù)向?qū)е钡侥銊?chuàng)建完成沫屡。
kotlin-new-project.png
當(dāng)你選擇一個activity模板時饵隙,Android Studio會提供Kotlin代碼。目前沮脖,只有一些“Phone and Tablet”提供了慣用的Kotlin代碼癞季。其余都是自動地將Java代碼轉(zhuǎn)換Kotlin代碼,這樣你仍然可以得到Kotlin代碼倘潜,但是可能一些代碼不是使用Kotlin最佳的語言特點绷柒。
就像Java文件一樣,Kotlin文件保存在 src/main/java/ 目錄名涮因。
添加Kotlin到已有的項目
如果你想要添加Kotlin代碼到已有的項目废睦,只需要點擊 File > New,然后選擇期中一個模板养泡。如果你的菜單中沒有如下的模板列表嗜湃,先打開Project 窗口,然后選擇你的app module澜掩。
下面向?qū)ы摮霈F(xiàn)時购披,選擇 Source language 中選擇 Kotlin 。
繼續(xù)向?qū)Ъ玳牛钡酵瓿伞?/p>
另外刚陡,你可以點擊 File > New > Kotlin File/Class 創(chuàng)建一個基本的文件。這個 Kotlin File/Class 窗口提供了幾種文件種類的選擇株汉,但是如果你稍后更改生命類型筐乳,Kotlin將會自動轉(zhuǎn)換文件類型,因此乔妈,無論你選擇哪一個都沒關(guān)系蝙云。
創(chuàng)建Kotlin文件默認(rèn)會保存在 src/main/java/ 。你可能發(fā)現(xiàn)在一個未致電很容易同時看到Kotlin和Java文件路召。但是如果你想要區(qū)分Kotlin文件和Java文件勃刨,你可以將Kotlin文件放到 src/main/kotlin/ 路徑下。如果你這樣做的話股淡,那么你需要在你的sourceSets配置中包含Kotlin文件的目錄
android {
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
將已有的java代碼轉(zhuǎn)換成Kotlin代碼
在Android Studio3.0中打開一個java文件身隐,并且選擇 Code > Convert Java File to Kotlin File 。
或者揣非,創(chuàng)建一個新的Kotlin文件(File > New > Kotlin File/Class)抡医,然后粘貼java代碼到該文件中躲因,當(dāng)提示的時候早敬,點擊Yes忌傻,開始將java代碼轉(zhuǎn)換成Kotlin。你可以選中 Don't show this dialog next time搞监,這將會極大方便你在Kotlin文件中存儲Java代碼片段水孩。
通過Kotlin來調(diào)用Android APIs
Kotlin提供了與Java語言的完全操作性,所以調(diào)用Android APIs 經(jīng)乘雎浚看起來完全像匹配了的Java代碼俘种。除了現(xiàn)在,你可以將那些方法調(diào)用和Kotlin語言特征相結(jié)合绝淡。
下面有一些在Kotlin中調(diào)用Android APIs的列子宙刘,以及一些對比的同樣調(diào)用的Java代碼的列子。
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 Kotlin
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
}
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;
}
};