Anko 通用模块

anko

目录

  1. 在您的项目中使用anko-commons助手
  2. Intents
    1. Intent构建器函数
    2. 有用Intent调用
  3. Dialogs
    1. Toasts
    2. SnackBars
    3. Alerts
    4. Selectors
    5. 进度dialogs
  4. 日志
    1. 强风格
    2. 日志记录器对象风格
  5. Misc
    1. 颜色
    2. 维度值
    3. applyRecursively()

在您的项目中使用anko-commons助手

添加anko-commons到对您的build.gradle的依赖:

1
2
3
4
dependencies {
compile "org.jetbrains.anko:anko-commons:$anko_version"
compile "org.jetbrains.anko:anko-design:$anko_version" // For SnackBars
}

Intents

Intent助手位于anko-commons工件内。

Intent构建器函数

通常,您必须编写多行来启动一个新的活动。它还要求你为传输额外的值写额外的行。例如,用extra (“id”, 5)和一个特殊的标志来启动一个活动的代码:

1
2
3
4
val intent = Intent(this, SomeOtherActivity::class.java)
intent.putExtra("id", 5)
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)

四行太过分了。Anko向你提供了一个更简单的方法:

1
startActivity(intentFor<SomeOtherActivity>("id" to 5).singleTop())

如果您不需要传递任何标志,那么解决方案就更简单了:

1
startActivity<SomeOtherActivity>("id" to 5)

有用Intent调用

Anko对一些广泛使用的意图进行了包装:

目标 解决方案
打电话 makeCall(number)
发送短信 sendSMS(number, [text])
浏览网页 browse(url)
分享文本内容 share(text, [subject])
发送电子邮件 email(email, [subject], [text])

方括号中的参数([])是可选的。如果发送了意图,方法返回true。

Dialogs

Dialog助手位于anko-commons工件内。

Toasts

简单地展示一个Toast的信息。

1
2
3
toast("Hi there!")
toast(R.string.message)
longToast("Wow, such duration")

SnackBars

简单地显示一条SnackBar消息。

1
2
3
4
snackbar(view, "Hi there!")
snackbar(view, R.string.message)
longSnackbar(view, "Wow, such duration")
snackbar(view, "Action, reaction", "Click me!") { doStuff() }

Alerts

一个用于显示alert dialogs的简单DSL。

1
2
3
4
alert("Hi, I'm Roy", "Have you tried turning it off and on again?") {
yesButton { toast("Oh…") }
noButton {}
}.show()

上面的代码将显示默认的Android警告对话框。
如果您想切换到appcompat实现,请使用Appcompat对话框:

1
alert(Appcompat, "Some text message").show()

默认情况下包括AndroidAppcompat对话框,但是您可以通过实现AlertBuilderFactory接口来创建您的定制工厂。

alert()功能无缝地支持Anko的布局,作为自定义视图:

1
2
3
4
5
alert {
customView {
editText()
}
}.show()

Selectors

selector()显示一个带有文本条目列表的警告对话框:

1
2
3
4
val countries = listOf("Russia", "USA", "Japan", "Australia")
selector("Where are you from?", countries, { dialogInterface, i ->
toast("So you're living in ${countries[i]}, right?")
})

进度dialogs

progressDialog()创建并显示一个进度对话框

1
val dialog = progressDialog(message = "Please wait a bit…", title = "Fetching data")

一个不确定的进度对话框也有(见indeterminateProgressDialog())。

日志

AnkoLogger位于anko-commons工件内。

强风格

Android SDK提供了android.util.Log类,并提供了一些日志记录方法。使用方法非常简单,但是方法要求您传递一个标记参数。你可以通过使用AnkoLogger的接口来消除这个问题:

1
2
3
4
5
6
7
class SomeActivity : Activity(), AnkoLogger {
private fun someMethod() {
info("London is the capital of Great Britain")
debug(5) // .toString() method will be executed
warn(null) // "null" will be printed
}
}
android.util.Log AnkoLogger
v() verbose()
d() debug()
i() info()
w() warn()
e() error()
wtf() wtf()

默认的标记名是一个类名(在本例中是SomeActivity),但是您可以通过覆盖loggerTag属性来轻松地更改它。

每个方法有两个版本:普通和懒惰(内联):

1
2
info("String " + "concatenation")
info { "String " + "concatenation" }

只有Log.isLoggable(tag, Log.INFO)true,Lambda结果才会计算

日志记录器对象风格

你也可以用AnkoLogger作为一个简单的对象。

1
2
3
4
5
6
7
8
class SomeActivity : Activity() {
private val log = AnkoLogger<SomeActivity>(this)
private val logWithASpecificTag = AnkoLogger("my_tag")

private fun someMethod() {
log.warning("Big brother is watching you!")
}
}

Misc

颜色

两个简单的扩展函数使代码更加可读。

函数 结果
0xff0000.opaque 不透明的红色
0x99.gray.opaque 灰色不透明的#999999

维度值

您可以在dip(密度-独立像素)或sp(独立像素)中指定维度值:dip(dipValue)sp(spValue)
注意,textSize属性已经接受sp(textSize=16f)。使用px2dippx2sp进行反向转换。

applyRecursively()

applyRecursively()将lambda表达式应用到传递View本身,然后递归地对视图中的每个子视图进行递归,如果是ViewGroup

1
2
3
4
5
6
7
8
9
10
verticalLayout {
editText {
hint = "Name"
}
editText {
hint = "Password"
}
}.applyRecursively { view -> when(view) {
is EditText -> view.textSize = 20f
}}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :