问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android kotlin anko怎么用

发布网友 发布时间:2022-04-22 08:13

我来回答

1个回答

热心网友 时间:2022-06-18 10:54

在项目中配置Kotlin和Anko环境,在项目的build.gradle中
buildscript {
ext.kotlin_version = '1.0.4'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the indivial mole build.gradle files
}
}

在模块的build.gradle中
apply plugin: 'kotlin-android'

compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile 'org.jetbrains.anko:anko-sdk15:0.9' // sdk19, sdk21, sdk23 are also available
compile 'org.jetbrains.anko:anko-support-v4:0.9' // In case you need support-v4 bindings
compile 'org.jetbrains.anko:anko-appcompat-v7:0.9' // For appcompat-v7 bindings
compile 'org.jetbrains.anko:anko-recyclerview-v7:0.9' // For appcompat-v7 bindings
compile 'org.jetbrains.anko:anko-design:0.9'

就这样配置好了Kotlin和Anko的环境了,接下来就能使用了:
变量

在java中声明一个变量时,需要先声明类型再声明变量,而Kotlin不用,而是跟js一样统一用var来修饰变量,用var修饰的变量值是可变的,如果你想声明一个不可变的变量即常量,可以用val关键字来形容,例如:
var a = "string"
val b = "final"

注意,因为Kotlin是空安全的,如果变量有可能是null,需要先用?显示声明变量可以为null,然后在别的地方使用时要用变量+!!来引用,即
var a : Int ?= null

a!!.toString()
方法

Kotlin中方法的声明统一用关键字fun来形容,例如:
fun A(a:Int){}//带参 无返回值
fun A(){}//不带参 无返回值
fun A(a:Int) : Int{return a}//带参 有返回值

Kotlin中方法的返回值是相当于定义变量一样用:类型。
data class

在java中定义一个数据类bean时要写成这样:
class A{
private String a;
//set方法
//get方法
}

就是这种一大堆,而Kotlin中数据类直接这样写:
data class A(val x: Double, val y: Double)

是不是很方便,这种写法是Kotlin初始化的方法一种形式,还有一种不是写在首行而是写在init{}块中,Kotlin允许有多个初始化方法,但是其它都是副初始化方法,最后都会指向主初始化方法。
Kotlin还有很大新特性,具体的可以去官网查看demo,这里只是大概列出一些普通的特性,
Anko是一个新的布局框架,在Android开发中布局都是写在xml文件中,每次都要写一大堆布局代码,而且不能复用,所以Android的布局一般都是很麻烦会花费很多时间,并且Android本身解析xml文件也需要时间,而Anko不会,Anko使用的是DSL,领域相关语言,开销很小,所以可以提高APP的绘制效率以及性能。
下面用Anko布局一个登陆界面,有用户名框,密码框,密码
relativeLayout {
editText {
id = PHONENUMBER_ID
}.lparams (width = matchParent,height = wrapContent){
centerHorizontally()
}

editText {
id = PASSWORD_ID
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
filters = myFilters
}.lparams(width = matchParent,height = wrapContent) {
below(PHONENUMBER_ID)
}

button(ctx.getString(R.string.btn_login)){
id = LOGIN_ID
}.lparams (width = wrapContent,height = wrapContent) {
below(PASSWORD_ID)
centerHorizontally()
}
}

这样就是布局了,简洁很多,并且复用,控件的布局是写在lparams中,Anko的扩展性也很强,就是自定义的控件也能放在Anko中使用例如:
inline fun ViewManager.myRecyclerView(theme: Int = 0) = myRecyclerView(theme) {}
inline fun ViewManager.myRecyclerView(theme: Int = 0, init: MyRecyclerView.() -> Unit) = ankoView({ MyRecyclerView(it) }, theme, init)

在这里自定义了一个控件叫MyRecyclerView,新建一个.kt文件,然后输入上面的代码,就可以在app中使用这个控件了
val myRecyclerView = myRecyclerView {
layoutManager = LinearLayoutManager(ctx, LinearLayoutManager.VERTICAL, false)

}.lparams(width = matchParent, height = wrapContent)

myRecyclerView.setEmptyView(textView ("空数据的时候显示") {})

myRecyclerView.setEmptyViewListener{
v->
Log.i("TAG","OOOOOOOO空数据")
}

这就是Anko的扩展性,而且扩展性还很强,可以用两个控件直接扩展成一个控件:
fun _LinearLayout.smsCode(name: String): EditText {
var a : EditText? = null
linearLayout {
orientation = LinearLayout.HORIZONTAL

textView("$name:") {
textSize = 18f
}.lparams(width = dip(50)
,height = dip(50)) {
}

a = editText().lparams (width = dip(50)
,height = dip(50)){
}
}
return a!!

}

这样就是把两个控件简单的合成一个,适用于一些控件布局是一样且经常用的,这样就可以直接当成一个控件来使用。
Anko和Kotlin还有更多好玩的特性,使用这种方式来开发Android,未尝不是一种提高效率,开发速度提高了很多,并且简洁很多了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 小龙虾那个牌子好吃 微软官网下载的wind10,是32位还是64位?想要下载6... 怎么讲搜狐视频转换格式 求BL现代文打包 kotlin能和java混用吗 即食小龙虾哪个牌子的好吃 五年级寒假音乐作业 微软免费的win10是64位的吗 谁知道搜狐影音的缓冲文件,怎么转换为视频文件 初一音乐寒假作业,有加分~~~~~~~~!!!!!!!!!!!!! 微软win7怎么安装不了64位 学习办公自动化,可不可以在网上有下载的软件吗? 用kotlin方法lambda表达式分别输出一个数组的偶数值 求容祖儿所以的歌..国语+粤语 不要重复的。。要所... 作文题目寒假与音乐 做了个网站,但体积太大,很多免费空间都不 小学生寒假音乐作业一周一特长怎么写 微软官方64位 专业版镜像有多大 win10 kotlin 函数怎么返回多个值 微软win7 64位旗舰版能用多久 四大天王的英文如何拼 有没有谁知道柯南有一集叫做《工藤新一之纽约事件... 微软32位的系统和64位系统和软件有关系吗? 搜狐影音最新般下载的格式是ifox,现在不好转换通... 美国华盛顿伯利克音乐学院什么时候放寒假????... 算24点,急!!!!!!!!!! 微软中国内部的员工级别是怎么定的?64级是什么意... 狄仁杰之四大天王的拼音怎么拼? 杭州音乐艺考寒假班集训怎么样? 天王盖地府,用拼音怎么拼? <<天王>>全 音乐家--求 win7旗舰版安装 微软官方64位失败怎么办【错误代码... 中央音乐学院09年寒假校外音乐水平考级简章 四大天王的名字怎么读? http://www.2259.com/mtv/play/f978c31eafc8e7a3.h... 天王盖地府,用拼音怎么拼 微软免费升级win10是32位还是64位的 英国皇家音乐学院什么时候放寒假 天王镇的拼音怎么读