专栏名称: 稀土圈
掘金团队是一个新锐的互联网创业团队,服务用户是互联网技术开发者和从业者。旗下产品有:(专注技术干货的)掘金,(优质的下线活动)Meetup。可以戳 http://xitu.io 了解更多。对了,稀土君爱你们?
目录
相关文章推荐
51好读  ›  专栏  ›  稀土圈

使用Kotlin优雅的开发Android应用

稀土圈  · 公众号  ·  · 2017-05-22 18:06

正文

请到「今天看啥」查看全文


username=(TextView)findViewById(R.id.user);


username.setText("我是一个TextView");


有时候写的是不是想吐,可能有些人说现在不是有一些注解的库,如butterknife,当我们使用注解时可以不用findViewById了,使用方式如下

@BindView(R.id.user)

TextView username;


username.setText("我是一个TextView");


确实是这样,使用注解后确实给我们少了一些工作量,不过这依然没有最简单化,最简单的就是我们可以直接给id为user的控件直接赋值,或许你会感觉这有点不可思议。不过Kotlin确实做到了。我们可以直接这样写

user.text="我是一个TextView"


看到这你是不是有一种相见恨晚的感觉,太Tama的简洁了。user就是我们布局文件声明的id,.text就想当与setText()给,在Kotlin语言中,我们看不到了像Java中的set/get方法了。需要注意的是,当我们想这样使用的时候(不用findViewById,直接使用xml控件我们需要在gradle加入apply plugin: 'kotlin-android-extensions'),需要加入下面一句代码

//activity_login就是我们的布局

import kotlinx.android.synthetic.main.activity_login.*


Anko Layout

通常我们使用xml文件写我们的布局,但是他有一些缺点如不是类型安全,不是空安全,解析xml文件消耗更多的CPU和电量等等。而Anko Layout可以使用DSL动态创建我们的UI,并且它比我们使用Java动态创建布局方便很多主要是更简洁,它和拥有xml创建布局的层级关系,能让我们更容易阅读。

verticalLayout {

val textView=textView("我是一个TextView")

val name = editText("EditText")

button("Button") {

onClick { toast("${name.text}!") }

}

}


我们在OnCreate方法中可以去掉setContentView,然后加入上面代码就可以显示如下图的效果,即一个垂直的线性布局中,放了一个TextView,一个EditText,和一个Button。并且Button中有一个点击事件,当点击时将EditText的内容
以toast显示。



上面的代码是不是很简单易懂,当然,默认的控件并不能满足我们的需求,例如我们会更改字体的颜色及大小,会设置宽度和高度,会设置margin,padding值,那么该如何实行呢,当然也很简单,因为它的逻辑和xml书写布局是一个套路。例如以下实现

val textView=textView("我是一个TextView"){

textSize = sp(17).toFloat()

textColor=context.resources.getColor(R.color.red)

}.lparams{

margin=dip(10)

height= dip(40)

width= matchParent







请到「今天看啥」查看全文