android Kotlin的第一個項目

版權聲明:本文爲 xu_song 原創文章,可以隨意轉載,但必須在明確位置註明出處!!!
由於2017 google I/O 大會 kotlin成了android的官方語言,我們做android的童鞋是不是坐不住了,想來看一下這一門語言的真面目呢。大家也不用擔心現在java 和kotlin二門語言可以進行並行的開發,我覺得新的功能可以嘗試用kotlin去寫,但是老的代碼也要用java去維護。這只是我個人的意見。
第一次用markdown來寫博客,有寫的不好的地方請大家指正
現在我們瞭解一下用kotlin來寫android的一些準備工作

首先下載一個android studio 3.0 preview

現在這個工具還是preview版本,正式版本還沒有出來,估計馬上就會出來了,聽說增加了很多新的功能。
這個是下載的地址 android studio 3.0 preview
這個是下載好的圖片,android studio的圖標也變成黃色的了
這個就是android studio 3.0

新建一個項目

你會看見有一些變化,多了一些功能增加了,看圖說畫,以前的版本是沒有這樣的功能的
kotlin支持
後面的步驟就和原來一樣的了,直到新建一個工程完成
注意 第一次新建項目可能會要等一下,因爲第一次下載新的gradle 及gradle構建工具

kotlin的第一個項目完成了

展示了我們程序員同志們的經典 Hello World
Hello World圖片
這樣是不是太簡單,太沒有追求了吧,竟然寫了要寫一個有一點技術含量的對吧。

第一次看到這樣的代碼是不是很好奇,感覺很奇怪,呵呵,慢慢就習慣了

  1. 我們來看一下工程 build文件裏面的相關配製
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.1.2-4'
    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        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
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”這個應該是kotlin的構建工具了

2.我們來看一下app工程的build文件配製

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "test.xs.com.application"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
}

apply plugin: ‘kotlin-android’
apply plugin: ‘kotlin-android-extensions’
這兩個注意要引入,第二個是直接使用控件,不需要findbyId函數就可以使用控件了

寫一個頁面跳轉的功能

從一個界面跳轉到另一個界面,我們來看一下代碼這個是MainActivity的主要代碼

package test.xs.com.application

import android.content.Context
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {


    /** 上下文 */
    var context: Context? = null


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        context = this
        setupViews()

    }

    override fun onStart() {
        super.onStart()
        Log.d("","onStart()===================="+Constant.Companion.LIST_PAGE_NUMBER+A.L)

    }



    fun setupViews() {
       button.setOnClickListener({
           startActivity(Intent(context,SecondActivity::class.java))
           finish()
       })

    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("","onDestroy()====================")
    }
}

1.class MainActivity : AppCompatActivity() 有了解過c++的都知道這是繼承了對吧

2.override fun onCreate(savedInstanceState: Bundle?) 這個fun表示方法,override重寫對吧,savedInstanceState: Bundle?這個?號是什麼意思,kotlin是一門對空檢查比較嚴格的語言,表示這個savedInstanceState可以爲空 其它的一些生命週期函數也是一樣的

3.其實這一看就明白重寫了AppCompatActivity的onCreate方法

4.var context: Context? = null 這個看着了比較好奇,就是定義了一個context變量,現在kotlin定義全局變量這樣定義了,要記住哦

5.代碼裏沒有一個分號是不是感覺很比彆扭,這也是kotlin的一大特點呀,簡潔

6.setupViews()函數裏直接使用button,都沒有初始化,不會報空指針吧,不會的
這一行import kotlinx.android.synthetic.main.activity_main.*代碼已經做好了初始化直接可以使用佈局裏的控件,是不是感覺很爽呀,省了很多事

7.跳轉到SecondActivity第二個界面,setupViews()函數裏面的代碼完全看不懂對吧記住了
在kotlin裏面新建一個對象是不需要new關鍵字的 直接這樣startActivity(Intent(context,SecondActivity::class.java))

Kotlin的一些其它特性

  1. 全局靜態變量
    我們新建了一個常量類Constant
package test.xs.com.application

/**
 * Created by xusong on 17/6/2.
 */
class Constant {
    companion object {
        /** 列表條數 */
        val LIST_PAGE_NUMBER:Int = 10

        fun stringIsEmty(str: String): Boolean {
            if (str.equals("") || str == null) {
                return true
            }
            return false
        }
    }
}

靜態的變量要寫在這個 companion object裏面
這個用法也要注意我們看一下這個val LIST_PAGE_NUMBER:Int = 10 這個常量的用法

Log.d("","onStart()===================="+Constant.Companion.LIST_PAGE_NUMBER)

2.靜態方法
這個是也是一樣的了也是要寫在companion object這個裏面的
這個用法還是一樣的
val result = Constant.stringIsEmty(“”)

3.變量
var變量 val常量

就寫到這裏了 很久沒有寫博客了,寫的不好以後慢慢改進,這個主要是學習一下kotlin,當然這個只講了一點點kotlin還有一些還多其它強大的功能,有機會再學習學習和大家一起探討
最後這個是這個項目的源碼
源碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章