赞
踩
前言
笔者第一次接触到Kotlin是在2016年6月份,当时项目有1/3的功能已经用Kotlin进行编码。不管是和Java的交互还是语法的简洁性都已经支持很好。正是因为其语法的简洁性和空指针安全,所以这两年的工作的项目里都有使用Kotlin。不能说Google将其作为Android第一开发语言开发人员就要放弃Java而一意追随。只是作为一门基于JVM新语言,我觉得Kotlin值得大家尝试。这个专栏也是主要介绍Kotlin以及Android开发使用Kotlin遇到的问题。
1. Kotlin in Android Studio
第一次使用Koltin时,当时AS版本在2.2左右,只能通过外部插件的方式在AS中使用。而在AS3.0+以上,Kotlin已经被”捆绑”在AS中。接下来将在AS3.0+版本中介绍Kotlin的使用。
首先创建一个工程,3.0版本以上,此面板会有支持Koltin选项,勾选下一步即可。
选择Android版本
选择创建一个空的Activity,下一步
命名Activity,点击完成
OK,到这里,你的第一个Android Kotlin类就已经创建好了。
接下来我们看下app的build.gradle文件中,Kotlin的依赖已经被添加进来。
AS以上创建Kotlin文件的步骤还是很简单的,我们观察一下上图gradle中引入了 ‘kotlin-android-extensions’,从字面意思看是Kotlin Android的拓展。下面将介绍这个功能。
你的项目中是否曾经也出现过这样的代码,一堆的findViewById(),写到手抽筋,代码太杂,或许你会说,我们用了ButterKnife,或者已经将findViewById做了封装抽取没有你这样复杂,的确上述方式是简单了很多,但是不管是第三方库还是封装findViewById,结果还是要写控件的Id,以及笔者在开发过程中还遇到过ButterKnife第三方库失效问题。而Kotlin将解放我们的双手,通过Android的拓展功能,获取控件对象无需添加任何代码,也能获取第三方库的效果。让我们一起摇摆(不,是用起来)!
2.Kotlin Android扩展
2-1.配置依赖
如上图所示位置
apply plugin: 'kotlin-android-extensions'
2-2.代码实现
XML布局文件声明一个id为textView文本控件。
<TextView
android:id="@+id/textView"
android:layout_width="100dp"
android:layout_height="100dp"
android:gravity="center"
android:textColor="@color/colorWhite"
android:textSize="16dp" />
代码使用拓展功能
/*import kotlinx.android.synthetic.main.<layout>.*/
/*这是导入指定布局中所有组件属性,如布局文件叫activity_main*/
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/*直接使用id属性给控件设置值,告别findViewById*/
textView.text = "Hello Kotlin"
}
}
看了上面的操作后,是不是觉得Kotlin对于代码真的有简约之美,我们在使用的过程中尽可能的避免控件的属性(如id)重复,尽管Android资源加载对两个相同id的控件也会分配不同的资源id,但是尽可能的不重复可以避免很多的意外。Kotlin拓展功能还有几个实验功能目前还没有正式开放,待正式开放时,将会把常用的功能在这里作补充。
3.Kotlin Anko库
Anko库,可以让Android的开发更加的简单,代码清晰易读,它主要由几个组成方式:
Anko Commons:intents,对话框,日志等帮助器
Anko Layouts:动态Android布局
Anko SQLite: Android SQLite的DSL和分析器集合
Anko Coroutines:基于kotlinx.coroutines库的实用程序
这里对Anko库中几个常用的库和帮助类做简单的介绍,很多功能目前在开发中的实用性不是很高。
3-1.intents用法
3-1-1.Kotlin中跳转Activity基本写法
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("isNormal", true)
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
3-1-2.Anko Intents写法
startActivity(intentFor<SecondActivity>("isNormal" to true).singleTop())
3-1-3.Anko Intents不带标志位的写法
startActivity<SecondActivity>("isNormal" to true)
3-2.Anko Layouts
在代码中进行动态布局,从开发习惯来说,这种写法对于目前安卓开发者来说很不”友好”。毕竟在XML中可以直接看到视图。所以这个功能点暂时不推荐使用,但是萝卜白菜各有所爱,有喜欢这种开发方式的同学可以尝试一波。
/*纵向布局*/
verticalLayout {
/*动态图片声明 lparams:设置view参数 */
imageView(R.mipmap.yww_1).lparams(width = dip(200), height = dip(400)) {
}
/*EditText 声明 ,参数是EditText的值*/
val name = editText("I am EdiText")
/*Button 声明*/
button("Akon Button") {
/*Button 点击事件*/
onClick {
toast("Hello,${name.text}")
}
/*Button 参数设置*/
}.lparams(width = wrapContent, height = wrapContent) {
horizontalMargin = dip(50)
topMargin = dip(30)
}
}
上面代码的效果图:
结尾
本篇介绍了在AS中创建Kotlin的步骤,以及Kotlin For Android的拓展功能和Anko功能,下篇将正式开始我们的Kotlin之旅。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。