使用Kotlin進行Android開發

 Kotlin是一門基於JVM的編程語言,它正成長爲Android開發中用於替代Java語言的繼承者。Java是世界上使用最多的編程語言之一,當其餘編程語言爲更加便於開發者使用而不斷進化時,Java並無像預期那樣及時跟進。
    Kotlin是由JetBrains建立的基於JVM的編程語言,IntelliJ正是JetBrains的傑做,而Android Studio是基於IntelliJ修改而來的。Kotlin是一門包含不少函數式編程思想的面向對象編程語言。
  Kotlin生來就是爲了彌補Java缺失的現代語言的特性,並極大的簡化了代碼,使得開發者能夠編寫儘可能少的樣板代碼。
聽說是Android下的swift語言,並且是有jetBrains出品,有這麼強大的IDE支持,必定錯不了。
 
AndroidStudio安裝Kotlin開發插件:
點擊「Install JetBrains plugin」
輸入kotlin搜索,安裝下面那個Kotlin Extension For Android插件,安裝後重啓AS。
 
建立KotlinActivity:
新建Android工程,這一步和之前建立安卓工程的步驟相似,這個時候工程裏面也沒有跟kotlin有半毛錢的關係。
只不過在工程建立完成後,再新建Activity的時候選擇KotlinActivity:
 
不帶分號結束的看起來就是舒服,習慣了Lua和Python。
自動建立的界面佈局文件和以前的沒什麼區別,依然是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導入佈局文件的引用便可,自動導入:
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代碼轉換爲Kotlin:
前面新建android工程的時候由於MainActivity並非KotlinActivity,所以須要轉換一下,
選擇菜單Code->Convert Java File to Kotlin File
除了文件內容改變以外,文件的擴展名也從.java變爲了.kt。
 
 
編譯,出現錯誤:
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建立界面:
前面的界面所有繼續使用了XML來建立的,這裏演示下使用anko建立界面。
首先配置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來設置的xml佈局,而使用了代碼直接建立,使用起來簡單直接了,可是缺點也很明顯,不能作到界面設計階段的實時預覽效果,很難作到所見即所得,好在xml還能繼續支持。
運行看下效果,點擊主界面的按鈕打開第二個頁面:
點擊Login按鈕彈出一個土司,文本就是該按鈕的文本。
 
 
參考:
相關文章
相關標籤/搜索