Anko和扩展的函数(六)

来源:互联网 发布:知满天教育官网 编辑:程序博客网 时间:2024/06/03 10:21
我们在开篇讲过,Anko在Kotlin中是个功能非常强大的类库。所以,我们先来了解一下Anko。Anko是JetBrains开发的一个强大的库。它主要的目的是用来替代以前XML的方式来使用代码生成UI布局。这是一个很有趣的特性。一般来说使用XML更容易一些。然而,这个不是我们能在这个库中得到的唯一一个功能。Anko包含了很多的非常有帮助的函数和属性来避免让你写很多的模版代码。Anko的实现方式对学习大部分的Kotlin语言都是非常有帮助的。在之前,让我们来使用Anko来简化一些代码。如你所见,任何时候你使用了Anko库中的某些东西,它们都会以属性名、方法等方式被导入。这是因为Anko使用了扩展函数这一重要概念,在Android框架中增加了一些新的功能。我们将会在以后看到扩展函数是什么,怎么去编写它。在MainActivity:onCreate,一个Anko扩展函数可以被用来简化获取一个RecyclerView:
val forecastList: RecyclerView = find(R.id.forecast_list)
我们现在还不能使用库中更多的东西,但是Anko能帮助我们简化代码,比如,实例化Intent,Activity之间的跳转,Fragment的创建,数据库的访问,Alert的创建……我们将会在逐步学习过程中了解并掌握Anko。扩展函数:扩展函数数是指在一个类上增加一种新的行为,即使我们没有这个类代码的访问权限。这是一个在缺少有用函数的类上扩展的方法。在Java中,通常会实现很多带有static方法的工具类。Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候把整个对象当作参数传入。扩展函数就像是属于这个类的一样,而且我们可以使用this关键字和调用所有public方法。举个例子,我们可以创建一个toast函数,这个函数不需要传入任何context,它可以被任何Context或者它的子类调用,比如Activity或者Service:
fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {    Toast.makeText(this, message, duration).show()}
这个方法可以在Activity内部直接调用:
toast("Hello world!")toast("Hello world!", Toast.LENGTH_LONG)
当然,Anko已经包括了自己的toast扩展函数,跟上面这个很相似。Anko提供了一些针对CharSequence和resource的函数,还有两个不同的toast和longToast方法:
toast("Hello world!")longToast(R.id.hello_world)
扩展函数也可以是一个属性。所以我们可以通过相似的方法来扩展属性。下面的例子展示了使用他自己的getter/setter生成一个属性的方式。Kotlin由于互操作性的特性已经提供了这个属性,但理解扩展属性背后的思想是一个很不错的练习:
public var TextView.text: CharSequence    get() = getText()    set(v) = setText(v)
扩展函数并不是真正地修改了原来的类,它是以静态导入的方式来实现的。扩展函数可以被声明在任何文件中,因此有个通用的约定就是把所有有关的函数放在一个新建的文件里。这是Anko的强大之处,当然我们在这里仅仅直接介绍了一点,很多东西还需要再去深入探索,最重要的是实践。
原创粉丝点击