如何使用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按钮弹出一个土司,文本就是该按钮的文本。
参考:
《kotlin for android developers》中文版翻译
getting started with android and kotlin
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。