如何使用Kotlin進行Android開發(fā)
Kotlin是一門基于JVM的編程語言,它正成長為Android開發(fā)中用于替代Java語言的繼承者。Java是世界上使用最多的編程語言之一,當其他編程語言為更加便于開發(fā)者使用而不斷進化時,Java并沒有像預(yù)期那樣及時跟進。
Kotlin是由JetBrains創(chuàng)建的基于JVM的編程語言,IntelliJ正是JetBrains的杰作,而Android Studio是基于IntelliJ修改而來的。Kotlin是一門包含很多函數(shù)式編程思想的面向?qū)ο缶幊陶Z言?! ?/p>
Kotlin生來就是為了彌補Java缺失的現(xiàn)代語言的特性,并極大的簡化了代碼,使得開發(fā)者可以編寫盡量少的樣板代碼。據(jù)說是Android下的swift語言,而且是有jetBrains出品,有這么強大的IDE支持,一定錯不了。
AndroidStudio安裝Kotlin開發(fā)插件:
點擊“Install JetBrains plugin”
輸入kotlin搜索,安裝下面那個Kotlin Extension For Android插件,安裝后重啟AS。
創(chuàng)建KotlinActivity:
新建Android工程,這一步和以前創(chuàng)建安卓工程的步驟類似,這個時候工程里面也沒有跟kotlin有半毛錢的關(guān)系。
只不過在工程創(chuàng)建完成后,再新建Activity的時候選擇KotlinActivity:
不帶分號結(jié)束的看起來就是舒服,習慣了Lua和Python。
自動創(chuàng)建的界面布局文件和之前的沒什么區(qū)別,依然是xml格式的。同時manifest里也會自動添加該Activity的聲明。
配置gradle:
如果IDE提示需要配置Kotlin的時候,就點擊配置就好了,會自動在project和module的build.gradle里配置好。如果是手動配置的話,請在project的build.gradle里配置:
buildscript { ext.kotlin_version = '1.0.2' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
在module的build.gradle里配置:
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.example.demo_yunbu" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } repositories { mavenCentral() }
最后IDE提示Sync Now,用用這些修改就好了。
最后我們在布局文件中添加一個TextView來演示控件的操作:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvMessage"/>
然后在Activity代碼里就可以直接使用變量tvMessage了,如果有如下提示:
只需要按Alt+Enter導(dǎo)入布局文件的引用即可,自動導(dǎo)入:
import kotlinx.android.synthetic.main.activity_main.*
然后可以直接使用變量tvMessage進行操作了,非常方便,再也不用每個控件用findViewById查找一遍了。
以下是完整的代碼:
package com.example.hellokotlin import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvMessage.text = "hello kotlin!"; btnOpenActivity2.text = "OpenActivity2" btnOpenActivity2.setOnClickListener({ startActivity(Intent(MainActivity@this, SecondActivity::class.java)) }) } }
把之前的java代碼轉(zhuǎn)換為Kotlin:
前面新建android工程的時候因為MainActivity并不是KotlinActivity,因此需要轉(zhuǎn)換一下,
選擇菜單Code->Convert Java File to Kotlin File
除了文件內(nèi)容改變之外,文件的擴展名也從.java變?yōu)榱?kt。
編譯,出現(xiàn)錯誤:
Error:(6, 8) Unresolved reference: kotlinx
Error:(13, 9) Unresolved reference: tvMessage
Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
提示缺少kotlin,需要手動配置一下,在module的build.gradle里添加:
buildscript { repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }
修改完成后Sync Now一次,編譯通過,運行效果:
點擊按鈕后打開一個空白的頁面,這里就不截圖了。
使用anko創(chuàng)建界面:
前面的界面全部繼續(xù)使用了XML來創(chuàng)建的,這里演示下使用anko創(chuàng)建界面。首先配置gradle,在project的gradle里buildscript添加:
ext.anko_version = '0.8.2'
再在module的gradle里dependencies添加:
// Anko compile "org.jetbrains.anko:anko-common:$anko_version" compile 'org.jetbrains.anko:anko-sdk15:0.8.2' // sdk19, sdk21, sdk23 are also available compile 'org.jetbrains.anko:anko-support-v4:0.8.2' // In case you need support-v4 bindings compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.2' // For appcompat-v7 bindings
最后Sync Now,成功后編輯SecondActivity的代碼:
package com.example.hellokotlin import android.support.v7.app.AppCompatActivity import android.os.Bundle import org.jetbrains.anko.* class SecondActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setContentView(R.layout.activity_second) verticalLayout { padding = dip(30) editText { hint = "Name" textSize = 24f } editText { hint = "Password" textSize = 24f } button("Login") { textSize = 26f onClick { toast(button@this.text) } } } } }
這里注釋掉了原來由setContentView來設(shè)置的xml布局,而使用了代碼直接創(chuàng)建,使用起來簡單直接了,但是缺點也很明顯,不能做到界面設(shè)計階段的實時預(yù)覽效果,很難做到所見即所得,好在xml還能繼續(xù)支持。運行看下效果,點擊主界面的按鈕打開第二個頁面:
點擊Login按鈕彈出一個土司,文本就是該按鈕的文本。
參考:
《Kotlin for android developers》中文版翻譯
Getting started with Android and Kotlin
Android開發(fā)必備知識:為什么說Kotlin值得一試
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中ListView下拉刷新的實現(xiàn)方法
這篇文章主要為大家詳細介紹了Android中ListView下拉刷新的實現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-03-03Flutter數(shù)字切換動畫實現(xiàn)示例詳解
這篇文章主要為大家介紹了Flutter數(shù)字切換動畫實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08android onTouchEvent處理機制總結(jié)(必看)
下面小編就為大家?guī)硪黄猘ndroid onTouchEvent處理機制總結(jié)(必看)小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04