[Android]使用Kotlin+Anko開發Android(一)

如下內容爲原創,歡迎轉載,轉載請註明html

來自每天博客:http://www.cnblogs.com/tiantianbyconan/p/4800656.html java

 

Kotlin是由JetBrains開發而且開源的靜態類型JVM語言。比Java語言語法簡潔,支持不少Java中不支持的語法特性,如高階函數、內聯函數、null安全、靈活擴展、操做符重載等等。並且它還徹底兼容Java,與Scala相似,可是Scala的宗旨是「儘量本身實現,不得已才使用Java」,而Kotlin卻相反:「儘量複用Java的實現,不得已才本身實現」。因此相比之下Kotlin更簡潔輕量,很是適合移動端的開發。另外JetBrains針對Android開發提供了一個由Kotlin實現的「anko」開源庫,可讓你使用DSL的方式直接用代碼編寫UI,讓你從繁瑣的xml中解脫出來,並且避免了xml解析過程所帶來的性能問題。android

 

這篇先講怎麼去使用idea(Android Studio用戶也同樣)搭建Kotlin的Android開發環境。安全

 

1、下載如下相關idea插件:app

1. Kotlinmaven

2. Kotlin Extensions For Androidide

3. Anko DSL Preview函數

其中Anko DSL Preview插件用於預覽使用DSL編寫的UI代碼,就像之前使用xml編寫UI文件時能夠動態在「Preview」窗口預覽效果同樣。性能

 

2、新建Android項目gradle

在src/main目錄下,新建kotlin目錄(用於放置kotlin代碼),配置Gradle以下:

 1 buildscript {
 2     ext.kotlin_version = '0.12.1230'
 3     repositories {
 4         mavenCentral()
 5     }
 6     dependencies {
 7         classpath 'com.android.tools.build:gradle:1.1.1'
 8         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 9         classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
10     }
11 }
12 apply plugin: 'com.android.application'
13 apply plugin: 'kotlin-android'
14 
15 repositories {
16     mavenCentral()
17 }
18 
19 android {
20     compileSdkVersion 22
21     buildToolsVersion "22.0.1"
22 
23     defaultConfig {
24         applicationId "com.wangjie.androidwithkotlin"
25         minSdkVersion 9
26         targetSdkVersion 22
27         versionCode 1
28         versionName "1.0"
29     }
30 
31     sourceSets {
32         main.java.srcDirs += 'src/main/kotlin'
33     }
34 
35     buildTypes {
36         release {
37             minifyEnabled false
38             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
39         }
40     }
41 }
42 
43 dependencies {
44     compile fileTree(dir: 'libs', include: ['*.jar'])
45     compile 'com.android.support:appcompat-v7:22.2.0'
46     compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
47     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
48     compile 'org.jetbrains.anko:anko:0.6.3-15'
49 }

而後sync & build。

 

3、配置Kotlin

調用「Configuring Kotlin in the project」這個Action

 

4、把Java代碼一鍵轉成kotlin代碼

打開要轉換的Java文件,調用「Convert Java File to Kotlin File」這個Action便可。

轉換以前的Java代碼:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

轉換以後的Kotlin代碼:

public class MainActivity : ActionBarActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }


    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        val id = item!!.getItemId()

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true
        }

        return super.onOptionsItemSelected(item)
    }
}
相關文章
相關標籤/搜索