版权声明:本文为 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还有一些还多其它强大的功能,有机会再学习学习和大家一起探讨
最后这个是这个项目的源码
源码下载