之前写了一写Kotlin的基本操作 是不是感觉太好用了
但是接下来介绍的这个库 让你会觉得太爽了 这个库就是超级好用的库anko
它总共有四个部分
Anko Commons
: a lightweight library full of helpers for intents, dialogs, logging and so on;Anko Layouts
: a fast and type-safe way to write dynamic Android layouts;Anko SQLite
: a query DSL and parser collection for Android SQLite;Anko Coroutines
: utilities based on the kotlinx.coroutines library.这里我们先说Anko Commons
它的作用
doAsync {
//异步分线程操作
uiThread {
//主线程操作
}
}
引用
dependencies {
compile "org.jetbrains.anko:anko-commons:0.10.4"
}
原写法
var intent = Intent();
intent.putExtra("id",5)
intent.putExtra("name","zhangjian")
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.setClass(this, SMainActivity::class.java)
startActivity(intent)
新写法
var intent = intentFor<SMainActivity>("id" to 5,"name" to "zhangjian").clearTask().newTask()
startActivity(intent)
其他有用的Intent
作用 | 写法 |
---|---|
打电话 | makeCall(number) without tel: |
发短信 | sendSMS(number, [text]) without sms: |
打开网页 | browse(url) |
分享文字 | share(text, [subject]) |
发邮件 | email(email, [subject], [text]) |
参数 ([]
) 是可选的. 如果intent
成功发送 方法返回true
.
引用
dependencies {
compile "org.jetbrains.anko:anko-commons:0.10.4"
compile "org.jetbrains.anko:anko-design:0.10.4" // For SnackBars
}
使用方式
Simply shows a Toast message.
toast("Hi there!")
toast(R.string.message)
longToast("Wow, such duration")
Simply shows a SnackBar message.
snackbar(view, "Hi there!")
snackbar(view, R.string.message)
longSnackbar(view, "Wow, such duration")
snackbar(view, "Action, reaction", "Click me!") { doStuff() }
A small DSL for showing alert dialogs.
alert("Hi, I'm Roy", "Have you tried turning it off and on again?") {
yesButton { toast("Oh…") }
noButton {}
}.show()
The code above will show the default Android alert dialog. If you want to switch to the appcompat implementation, use the Appcompat
dialog factory:
alert(Appcompat, "Some text message").show()
Android
and Appcompat
dialog factories are included by default, but you can create your custom factories by implementing the AlertBuilderFactory
interface.
alert()
functions seamlessly support Anko layouts as custom views:
alert {
customView {
editText()
}
}.show()
selector()
shows an alert dialog with a list of text items:
val countries = listOf("Russia", "USA", "Japan", "Australia")
selector("Where are you from?", countries, { dialogInterface, i ->
toast("So you're living in ${countries[i]}, right?")
})
progressDialog()
creates and shows a progress dialog.
val dialog = progressDialog(message = "Please wait a bit…", title = "Fetching data")
引用
dependencies {
compile "org.jetbrains.anko:anko-commons:0.10.4"
}
使用方式
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() |
默认的
tag
是类名 Lambda result will be calculated only ifLog.isLoggable(tag, Log.INFO)
istrue
.
自定义tag
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!")
}
}
这部分总体感觉没什么卵用
Two simple extension functions to make the code more readable.
Function | Result |
---|---|
0xff0000.opaque | non-transparent red |
0x99.gray.opaque | non-transparent #999999 gray |
px转dp/sp
px2dip(10)
px2sp(10)
applyRecursively()
applies the lambda expression to the passed View
itself, and then recursively to every child of a View
if it is a ViewGroup
:
verticalLayout {
editText {
hint = "Name"
}
editText {
hint = "Password"
}
}.applyRecursively { view -> when(view) {
is EditText -> view.textSize = 20f
}}