Kotlin环境 android studio 3.0是集成了kotlin 要是有不会搭建的小伙伴可以看看这里 http://www.jianshu.com/p/d6a763aa34f0 首先要加上anko 的依赖 project buid 文件 app buid文件 compile "org.jetbrains.anko:anko-sdk25:$anko_version" compile "org.jetbrains.anko :anko-sdk25-coroutines:$anko_version"
前言 之前写了一写Kotlin的基本操作 是不是感觉太好用了 但是接下来介绍的这个库 让你会觉得太爽了 这个库就是超级好用的库anko 它总共有四个部分 Anko Commons: a lightweight library full of helpers for intents, dialogs, logging and so on; Anko Layouts: a fast and type-safe ; Anko Coroutines: utilities based on the kotlinx.coroutines library. 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.
因此这里翻译了一下Anko这个库布局部分。 为什么需要Anko Layouts 默认情况下,Android里的UI是用XML来写的。 Layouts 需要包括下面的库依赖: dependencies { // Anko Layouts compile "org.jetbrains.anko:anko-sdk25:$anko_version $anko_version" // Coroutine listeners for Anko Layouts compile "org.jetbrains.anko:anko-sdk25 -coroutines:$anko_version" compile "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version 原链接:https://github.com/Kotlin/anko/wiki/Anko-Layouts
包括Rx系列也出了RxKotlin,既RxJava的Kotlin版 Kotlin和Anko使用 Anko的github地址为https://github.com/Kotlin/anko。 '} //这是你需要加入的 } } 然后,在你app moudle的build文件里面添加依赖: compile "org.jetbrains.anko:anko-sdk15:0.9.1" // So here it's 15 too compile "org.jetbrains.anko:anko-appcompat-v7:0.9.1" compile "org.jetbrains.anko :anko-design:0.9.1" compile "org.jetbrains.anko:anko-recyclerview-v7:0.9.1" 根据kotlin的优势,选择使用anko进行编写 附:Anko的github地址为https://github.com/Kotlin/anko
包括Rx系列也出了RxKotlin,既RxJava的Kotlin版 #Kotlin和Anko使用 Anko的github地址为https://github.com/Kotlin/anko。 '} //这是你需要加入的 } } 然后,在你app moudle的build文件里面添加依赖: compile "org.jetbrains.anko:anko-sdk15:0.9.1" // So here it's 15 too compile "org.jetbrains.anko:anko-appcompat-v7:0.9.1" compile "org.jetbrains.anko :anko-design:0.9.1" compile "org.jetbrains.anko:anko-recyclerview-v7:0.9.1" 根据kotlin的优势,选择使用anko进行编写 附:Anko的github地址为https://github.com/Kotlin/anko
学习 Kotlin 应该都或多或少听过 Anko 这个开源库。 使用 Anko 来构建界面会更加简单、快捷。 而 Anko 则是直接创建 View,用代码构建布局,省去了解析 XML 的时间。 添加依赖 Anko 的 Github 仓库是:https://github.com/Kotlin/anko。 Anko Layouts 动态布局用的最主要的库,将许多 Android 的控件 View 转换成了 Anko 加载的形式。 自定义 View 的加载 除了 Anko 自带以及支持的控件之外,还可以让自定义的 View 也支持 Anko 的加载方式,在 Anko 的代码块中去更改自定义 View 的设置属性。 参考 1、https://github.com/Kotlin/anko/wiki/Anko-Layouts
Kotlin官方文档(英文版) Kotlin官方文档(中文版) Anko——JetBrains开发的一个强大的库 以登录为例,小小练手 package com.yechaoa.kotlinforlogin import android.widget.Toast import kotlinx.android.synthetic.main.activity_login.* import org.jetbrains.anko onDestroy() { super.onDestroy() //AnkoLogger info("onDestroy") } } 另外,Anko 支持动态生成视图,语法简单,结构清晰,但是不能预览,预览插件: https://github.com/Kotlin/anko/wiki/Anko-Layouts#anko-support-plugin
昨天在学习使用kotlin的时候遇到了anko写toast("提示")导入不了anko包的问题org.jetbrains.anko.toast 将 dependencies { implementation "org.jetbrains.anko:anko:$anko_version" } 中的 implementation替换为api即可 dependencies { api "org.jetbrains.anko :anko:$anko_version" }
Anko (https://github.com/Kotlin/anko) 是一个用 Kotlin 写的Android DSL (Domain-Specific Language)。 Anko由几个部分组成: 模块 功能说明 Anko Commons 使得对 intents, dialogs, logging等操作更加简单的轻量级库 Anko Layouts 快速和类型安全的动态的 android 布局库 Anko SQLite 用于 android sqlite 的查询 dsl 和分析库 Anko Coroutines 基于 kotlinx 协程库 有了Anko 我们就能直接用 13.2 一个简单Anko视图 这里是一个转换成 Anko 的简单 XML 文件。 螢幕快照 2017-07-21 16.01.41.png 13.6.3 Anko依赖 在项目依赖里添加 // Anko compile 'org.jetbrains.anko:anko-sdk15
Anko 已经超神 要说用 Kotlin 写 Android,Anko 谁人不知谁人不晓,简直到了超神的地步。 :anko-appcompat-v7:0.9' // For appcompat-v7 bindings 稍微提一句 anko-sdk 的版本选择: org.jetbrains.anko:anko-sdk15 :anko-sdk21 : 21 <= minSdkVersion < 23 org.jetbrains.anko:anko-sdk23 : 23 <= minSdkVersion 当然除了这些之外, anko 还对 cardview、recyclerview等等做了支持,大家可以按需添加,详细可以参考 Github - Anko 另外,也建议大家用变量的形式定义 anko 库的版本,比如: ext.anko_version org.jetbrains.anko:anko-appcompat-v7:$anko_version" // For appcompat-v7 bindings 好,有了 Anko 我们能干什么呢?
:anko-sqlite:$ankoVersion" implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion" implementation "org.jetbrains.anko:anko-sdk15-listeners:$ankoVersion" implementation "org.jetbrains.anko:anko-design "org.jetbrains.anko:anko-appcompat-v7-listeners:$ankoVersion" 简单的使用 最后贴出我的build.gradle配置文件 // Top-level :anko-sdk15:0.9.1" // So here it's 15 too implementation "org.jetbrains.anko:anko-appcompat-v7:0.9.1 " implementation "org.jetbrains.anko:anko-design:0.9.1" implementation "org.jetbrains.anko:anko-recyclerview-v7
最近在写项目时,再次拿出anko这个框架,思考它在UI小组件上的可用性。 PS: Anko ! = Anko_Layouts ,但是为了表述方便,文中一部分Anko是代指这Anko Layouts框架,大家自己理解一下~ 概述 关于 Anko-Layouts框架的好处和局限性,网上已经有大部分文章在讲 经过大家的一些踩坑,以及开发上的试用,一致表示,Anko Layouts无法用在成熟的项目之中,还是老老实实用XML吧… Anko Layouts的DSL设计那么棒… 就要这么放弃了吗 大家眼里的Anko /ViewGroup的地方就可以使用Anko,而Anko的作用也就是简化初始化View + AddView的流程。 还想说的 Anko DSL让人望而却步的部分就是它不能支持即时预览,所以这个局限性也就导致Anko无法构建大型复杂的页面。
1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' 我的常用组件 Kotlin Kotlin & anko anko project - build.gradle buildscript { ext.kotlin_version = '1.1.51' //.... implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.anko :anko:$anko_version" } UI 下拉刷新 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' implementation :anko:$anko_version" 可以使用Anko代替 应用崩溃检测服务 Bugly implementation 'com.tencent.bugly:crashreport_upgrade
;toast("小提示:您点了一下") } 该说的都说完了,我再介绍一个库:Anko库 简介:Anko是使用Kotlin语言编写的一个Android增强库,它用于简化Android开发时的Kotlin 代码,让你的Kotlin代码更加的简洁易懂,就如同我们刚才用到的toast和longToast,这两个函数再Anko库中的原始定义是下面这样的: toast fun Context.toast(message 为了正常使用toast和longToast,我们需要在项目的build.gradle,在buildscript节点中补充下面一行代码, ext.anko_version = '0.9'//指定Anko的版本 同时,在模块的build.gradle,在dependencies节点中补充anko-common包如下代码: implementation"org.jetbrains.anko:anko-common :$anko_version" 如下图所示 ?
2.3 Anko Anko库包括Anko Commons、Anko Layouts、Anko SQLite、Anko Coroutines,这些都是使用kotlin DSL编写,这里主要介绍Anko Layouts 在写Android布局时,我们都习惯性的使用XML进行编写,但是可以考虑丢下冗长的XML写法,尝试使用Anko Layout来实现。 XML写法: Anko Layout写法: 实际上前文提到过,XML本质上也是一种DSL,但是明显使用Anko Layout风格更加简单、也更加灵活。 Anko Layout执行流程: ? Anko库实际上是用kotlin对相关类做了一层扩展包装,基于这一点,它的局限性也体现在于会增加包大小,在使用之前可以根据项目评估一下是否适合引入Anko库。
库, 第一步 修改项目的build.gradle,在buildscript里加上 ext.anko_version = '0.10.8' 修改模块的build.gradle,在dependencies 里加上 implementation "org.jetbrains.anko:anko-common:$anko_version" 加完之后Sync同步一样。 然后在MainActivity中导入 import org.jetbrains.anko.startActivity 然后就可以直接使用了。 库扩展出来的intentFor函数简化启动标志的设置方式,列如,启动标志FLAG_ACTIVITY_NEW_TASK 对应的Anko写法如下: startActivity(intent.newTask( )) 短小精悍 来看一下所有的Java方法对应的Anko库的写法 Intent类的启动标志 Anko库的标志设置函数 FLAG_ACTIVITY_NEW_TASK newTask() FLAG_ACTIVITY_SINGLE_TOP
目录 配置 Anko 再也不用findViewById Anko Layout 实现一个简单的登录界面 1 配置 项目gradle文件: ? app Gradle文件: ? 2 Anko 通过上面的配置,你会发现引入的有anko的依赖。 不管怎样,这种DSL确实便于阅读,也很容易上手,在上面的代码中,你可能注意到了dip(10),它表示将10dp转换为像素的意思,是Anko的扩展函数,说的扩展函数,如果阅读过Anko的源码我们发现里面大量的使用扩展函数 其实Anko的强大之处远不止于此,值得我们细细品味。 想更深入学习可以去GitHub Anko(https://github.com/Kotlin/anko),到此呢,本篇文章也就结束了,若在阅读时发现错误之处,欢迎指出,谢谢,Have a wonderful
options common to all sub-projects/modules. buildscript { ext.kotlin_version = "1.5.0" ext.anko_version :anko-commons:$anko_version" // Anko Commons implementation "org.jetbrains.anko:anko-sdk25:$anko_version " // Anko Layouts sdk15, sdk19, sdk21, sdk23 are also available implementation "org.jetbrains.anko :anko-sdk25-coroutines:$anko_version" // Coroutine listeners for Anko Layouts implementation "org.jetbrains.anko :anko-sqlite:$anko_version" // Anko SQLite implementation 'org.xutils:xutils:3.3.36' implementation
: import org.jetbrains.anko.dip 既然用到了Anko库,自然要修改模块的build.gradle,在dependencies节点中补充下述的anko-common包编译配置 : compile "org.jetbrains.anko:anko-common:$anko_version" Anko库除了提供dip方法,还提供了sp、px2dip、px2sp、dimen : import org.jetbrains.anko.* 另外要修改模块的build.gradle,在dependencies节点中补充下述的anko-common包编译配置: compile "org.jetbrains.anko:anko-common:$anko_version" 除了above和alignParentLeft之外,Anko也提供了所有的相对位置设定方法,具体的对应关系说明见下表 Anko库的相对位置 RelativeLayout类的相对位置 leftOf LEFT_OF sameTop ALIGN_TOP above ABOVE sameLeft
Anko插件 最后我们来简单的介绍下DSL在Kotlin中的一个框架Anko,Anko用Kotlin DSL 写的Android插件,Anko主要的作用是替代以前用XML的方式来生成UI布局。 由于Anko是直接通过Java代码来编写布局文件的,不用进行转化,因此使用Anko编写Android界面的布局会更加简单、快捷。 关于Anko插件如何使用,就不讲解了,感兴趣的可直接到Github上了解:https://github.com/Kotlin/anko 写在最后 DSL的使用场景远远不止这些,其实前提就是使用好高阶函数