专栏首页码客Android Kotlin启程之Anko

Android Kotlin启程之Anko

前言

之前写了一写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 它的作用

  • Intents (wiki);
  • Dialogs and toasts (wiki);
  • Logging (wiki);
  • Resources and dimensions (wiki).

异步操作

doAsync {
    //异步分线程操作
    uiThread {
        //主线程操作
    }
}

Intent

引用

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.

Dialogs and toasts

引用

dependencies {
    compile "org.jetbrains.anko:anko-commons:0.10.4"
    compile "org.jetbrains.anko:anko-design:0.10.4" // For SnackBars
}

使用方式

Toasts

Simply shows a Toast message.

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

SnackBars

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() }

Alerts

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()

Selectors

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?")
})

Progress dialogs

progressDialog() creates and shows a progress dialog.

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

Logging

引用

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 if Log.isLoggable(tag, Log.INFO) is true.

自定义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!")
    }
}

Resources and dimensions

这部分总体感觉没什么卵用

Colors

Two simple extension functions to make the code more readable.

Function

Result

0xff0000.opaque

non-transparent red

0x99.gray.opaque

non-transparent #999999 gray

Dimensions

px转dp/sp

px2dip(10)
px2sp(10)

applyRecursively()

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
}}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 以开发者为中心的小程序生态

    小程序现有的开发模式是基于已有的小程序基础库提供的组件,通过自定义业务的样式实现自定义化和功能。

    villainhr
  • Dialog和PopupWindow的区别

    它们都可以实现弹窗功能,但是他们之间有一些差别,下面我们先对比Dialog和PopuWindow区别。

    剑行者
  • jquery 模态窗口 弹出窗 simpleModal

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/h...

    用户5760343
  • Flutter实战 | 从 0 搭建「网易云音乐」APP(一、创建项目、添加插件、通用代码)

    本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。

    Flutter笔记
  • Pywinauto之Windows UI 自动化1

    前言,公司要搭建自动化测试环境,涉及到对设备软件的烧录操作,在网上找了些资料,发现pywinauto这个python库,能很好的支持PC端跑自动化,为此,记录下...

    用户6367961
  • Flutter更新showDialog以及showModalBottomSheet中的状态中的内容

    很多人在使用 showDialog 或者 showModalBottomSheet 的时候,都会遇到这个问题:通过 setState 方法无法更新当前的dial...

    拉维
  • 我常用的iOS开源库

    OC库和Swift库相似功能的很多 选择的建议是:如果OC库在Swift中完全能用 就优先用OC库 原因是:Swift语言还是不太稳定 语言一更新 程序一大改 ...

    剑行者
  • jQuery基础--插件

    官方API:http://api.jqueryui.com/category/all/

    eadela
  • uni app 零基础小白到项目实战-1

    uni-app是一个使用vue.js开发跨平台应用的前端框架。 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多...

    达达前端

扫码关注云+社区

领取腾讯云代金券