版權聲明:本文爲 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的圖標也變成黃色的了
新建一個項目
你會看見有一些變化,多了一些功能增加了,看圖說畫,以前的版本是沒有這樣的功能的
後面的步驟就和原來一樣的了,直到新建一個工程完成
注意 第一次新建項目可能會要等一下,因爲第一次下載新的gradle 及gradle構建工具
kotlin的第一個項目完成了
展示了我們程序員同志們的經典 Hello World
這樣是不是太簡單,太沒有追求了吧,竟然寫了要寫一個有一點技術含量的對吧。
第一次看到這樣的代碼是不是很好奇,感覺很奇怪,呵呵,慢慢就習慣了
- 我們來看一下工程 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的一些其它特性
- 全局靜態變量
我們新建了一個常量類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還有一些還多其它強大的功能,有機會再學習學習和大家一起探討
最後這個是這個項目的源碼
源碼下載