├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── easy │ │ └── kotlin │ │ └── mytodoapplication │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── easy │ │ │ └── kotlin │ │ │ └── mytodoapplication │ │ │ └── TAG.java │ ├── kotlin │ │ └── com │ │ │ └── easy │ │ │ └── kotlin │ │ │ └── mytodoapplication │ │ │ ├── MainActivity.kt │ │ │ ├── MyTodoApplication.kt │ │ │ ├── TodoAdapter.kt │ │ │ ├── TodoEditFragment.kt │ │ │ ├── TodosFragment.kt │ │ │ └── model │ │ │ └── Todo.kt │ └── res │ │ ├── drawable-hdpi │ │ └── ic_content_add.png │ │ ├── drawable-mdpi │ │ └── ic_content_add.png │ │ ├── drawable-xhdpi │ │ └── ic_content_add.png │ │ ├── drawable-xxhdpi │ │ └── ic_content_add.png │ │ ├── drawable-xxxhdpi │ │ └── ic_content_add.png │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── content_main.xml │ │ ├── empty_view.xml │ │ ├── fragment_todos.xml │ │ └── todo_item.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── ids.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── easy │ └── kotlin │ └── mytodoapplication │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 第13章 使用 Kotlin 和 Anko 的Android 开发 2 | === 3 | 4 | 5 | ## 13.1 什么是 Anko? 6 | 7 | Anko (https://github.com/Kotlin/anko)  是一个用 Kotlin 写的Android DSL (Domain-Specific Language)。长久以来,Android视图都是用 XML 来完成布局的。这些 XML可重用性比较差。同时在运行的时候,XML 要转换成 Java 表述,这在一定程度上占用了 CPU 和耗费了电量。 8 | 9 | Anko是一个 Kotlin 库, 它使 android 应用程序的开发变得更快、更容易。它使您的代码干净, 易于阅读, 并让您忘记了粗糙的边缘 android sdk 为 java。 10 | 11 | Anko由几个部分组成: 12 | 13 | |模块| 功能说明| 14 | |---|---| 15 | |Anko Commons| 使得对 intents, dialogs, logging等操作更加简单的轻量级库| 16 | |Anko Layouts| 快速和类型安全的动态的 android 布局库| 17 | |Anko SQLite| 用于 android sqlite 的查询 dsl 和分析库| 18 | |Anko Coroutines| 基于 kotlinx 协程库| 19 | 20 | 有了Anko 我们就能直接用 Kotlin 在任何的 Activity 、 Fragment 或者 AnkoComponent里来编写视图。 21 | 22 | ## 13.2 一个简单Anko视图 23 | 24 | 这里是一个转换成 Anko 的简单 XML 文件。 25 | 26 | XML 27 | ``` 28 | 32 | 37 |