Default image

lizhaotailang

从 Groovy 到 Kotlin DSL, Android 构建脚本迁移指南

为什么要从 Groovy 迁移到 Kotlin DSL? Gradle 从 5.0 开始, 正式加入了对 Kotlin DSL 的支持, 相比于传统的 Groovy, Kotlin DSL 带来的好处包括: 更好的 IDE 支持, 包括自动补全, 代码提示, 源码跳转, 错误高亮, 重构和 Debug 等(得益于 Kotlin 本身是一种静态强类型的语言); 支持自动检测导包; Kotlin 语言层级的特性如顶级函数, 扩展方法等; 更加熟悉的语法; 支持与 Groovy 混编等(得益于 Kotlin for…

聊聊播客这件事

播客是什么? 播客 = Podcast = iPod + broadcast, 我的理解就是网络广播📢(广播, 好陌生的名词, 怀念高中下自习之后的晚上用诺基亚1280插上耳机之后收听 FM 91.8 湖南交通频道的日子)嘛. 为什么要听播客? 长见识 很多大佬开了一些很 hardcore 的, 专业性很强的播客, 比如内核恐慌(程序员, 极客相关), 字谈字畅(字体排印), Android Developers Backstage(Android 开发相关)等等, 一定能让你从中学到很多知识. 学外语 像陈清泉一样学外语, 各种语言教程, 比如学习英语的 Daily English Expression Podcat, ESL Podcast, 听力素材 NPR…

写一个 Golang cli 程序吧

本文会介绍如何编写一个 go 命令行(cli)程序, 用于浏览 GitHub trending repositories 和 developers. 首先我们看一下最终的实现效果: 编码 API GitHub 官方并没有提供 trending 相关的 API, 不过 提供了一个非官方的实现, 我们可以通过它实现我们的需求. github-trending-api 提供了3个 API: ;since=weekly: 用于查询 trending repositories, 其中 language 为可选参数, 默认为 空字符串(“”), 所有侯选值可以通过第三个 API 获取, since 也为可选参数, 默认为 daily,…

你好, View Binding! 再次再见, findViewById!

作为一个 Android 开发者, 你一定听说过 findViewById. 这个方法可以根据 ID 去匹配对应的 View. 实现了类似功能或者增强了其功能的还有: Butter Knife(Kotter Knife) Kotlin Android Extensions Data Binding View Binding 为什么不是 findViewById/Butter Knife(Kotter Knife)/Kotlin Android Extensions ? 优雅程度 可以确定的是 findViewById 和 Kotter Knife 是最不优雅的. 每初始化一个 view 都需要调用一次 findViewById 或 bindView…

京都之旅

终于在2月25日迎来了期待已久的京都旅行. 首先介绍一下大概的路线图: 出发! 11点30分从广州乘订好的大巴🚌出发去深圳, 然后从深圳转乘船⛴到达香港🇭🇰国际机场, 然后乘坐香港航空到达大阪国际机场, 最后乘大巴🚌从机场出发到在京都下榻的酒店. 没错, 出发的日子是最辛苦的, 一整天(真的是一整天25日11:30AM-26日1:30AM)都是在路上. 香港航空的飞机餐: 另外很幸运的, 看到了非常非常漂亮的夕阳, 同时又很不幸的我并不是靠窗的座位, 只有这样一张很残的照片: 落地之后第一感觉, 温度有点低😂, 京都比广州低了至少10°C. 海关的工作人员态度也很好, 说话都是轻声细语. 中间还有一个挺有意思的小插曲, 我的入境单上的联系地址填成了一个东京的地址, 工作人员很耐心的询问我确定要在当晚去到东京吗, 这个时候我6级都还差几分的英语终于派上了用场, 一顿操作猛如虎之后再填一张完美解决. 过关之后马上又是乘日本这边预定好的大巴前往酒店. 之前就听闻日本人很敬业, 做事认真, 刚上大巴就让我确定之前的听闻确为事实:车上没有一点点的异味, 座位、车内车外的车身、车窗、车底放行李的地方都擦得干干净净, 第一眼还是挺 shock 的(整个旅行期间, 日本的服务业都让我 shock), 不过马上就是遗憾了, 我能想象国内达到这样的水平还需要多少年. 需要详细介绍一下我们下榻的 京都凯悦酒店(Hyatt Regency…

GraphQL on Android

 什么是 GraphQL GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. 如果你是一个移动开发者, 相信你对 RESTful API 一定不陌生. GraphQL 由 Facebook 在 2012 年开发并开源, 是一门 查询语言, 可作为 RESTful API 的替代方案. GraphQL 并不针对某个特定平台, Android,…

探索 Android 中的 Span

在 Android 中,使用 Span 定义文本的样式. 通过 Span 改变几个文字的颜色,让它们可点击,放缩文字的大小甚至是绘制自定义的项目符号点(bullet points,国外人名中名字之间的间隔符号 · ,HTML 中无序列表项的默认符号)。Span 能够改变 TextPaint 属性,在 Canvas 上绘制,甚至是改变文本的布局和影响像行高这样的元素。Span 是可以附加到文本或者从本文分离的标记对象(markup objects);它们可以被应用到部分或整段的文本中。 让我们来看看Span如何使用、提供了哪些开箱即用的功能、怎样简单地创建我们自己的 Span 以及如何使用和测试它们。 Styling text in Android Appearance vs metric affecting spans Character vs paragraph affecting spans Creating custom spans Testing…

macOS Mojave 上手体验

中文 | English macOS Mojave 上手体验 WWDC 2018 4号正式召开, 正如之前媒体所爆料的那样, 本次 WWDC 并没有发布新的硬件产品, 而是更加关注于软件的升级, 带来了包括 iOS 12, macOS 10.14 Mojave, watchOS 5 和 tvOS 12. 当然现在他们都还处于 开发者预览版 的状态, 仅供开发者适配和尝鲜使用, 不建议在生产环境升级. 如果你有升级的打算, 可以在文末找到升级的方法. 好了, 下面正式开始. 新功能新特性 深色模式 先说说升级体验. 整个升级过程非常的简单, 大约耗时35分钟. 升级完成进入登录界面后,…

将 Android 项目迁移至 Kotlin Coroutines

前言 在2017年 Google I/O 大会上, Google 宣布了 Android 平台对 Kotlin 语言的官方支持. 我思考了很久如何向没有听说过 Kotlin 语言的开发者介绍它呢? 用这个知乎的段子应该是最合适不过了: Scala:想解决 Java 表达能力不足的问题 Groovy:想解决 Java 语法过于冗长的问题 Clojure:想解决 Java 没有函数式编程的问题 Kotlin:想解决 Java 段子归段子, 事实上, Kotlin 在国外公司的应用已经十分广泛, 如 Pinterest, Gradle, Evernote, Uber, Trello, Square, Google 等等. 那么为什么要使用…

Android Tools attributes listItem 和 sample data 的用法

tools attributes 你听说过 layout tools attributes 吗? 有时候我们会引入下面的代码, 但是你了解过它具体的作用吗? 拿最简单的 TextView 举个例子, 我们知道为 TextView 设置 text 的方法是: 我们想要在 XML 中预览数据可以直接通过上面的方法实现, 但是直接在 XML 中写死就有可能出现这样的情况: 从网络或者数据库获取数据有一定的延迟, 用户可能先看到了我们预设的假数据, 然后 TextView 才更新为从数据库或者网络获取到的数据, 这就很尴尬了. 使用 Tools Attributes 就可以避免上面这种尴尬情况的出现. 我们将 替换为 我们就可以直接在 Android Studio 中预览效果, 但是在打包…

探索 Android Design Support Library v28 新增内容

Android Support Library v28 版本最近被宣布推出 — 在当前的 alpha 版本中, 我们又有了一系列令人兴奋的新组件. 在这篇文章中, 我想要看看以 Material 视图组件形式添加进入 Support Library 的新增部分. Material Button Material Button 是一个小部件, 可用于在你的应用程序的用户界面中显示材质样式的按钮. 这个类从你可能已经使用的 AppCompatButton 类继承而来. 它们之间有什么不同呢? 这个按钮开箱即用, 它被设计成具有物质本质外观和质感, 而无需使用样式标志定义. 我们按照原样使用 MaterialButton 类, 并且在我们的视图中, 它将具有我们所追求的材质外观和质感 — 将其视为一个提供方便的类. 我们可以像这样将这个按钮添加进布局文件中: 默认情况下, 此类将使用主题的…

LeetCode 1 – 50 解法

在文章正式开始之前, 首先有几点需要特别说明: 本文所有代码都托管在 Windary: , 如果你发现了错误, 请通过 issue 或其他方式指出, 但是暂时 不 接受 Pull Request; 我提供的算法仅供参考, 并不代表最佳的解法(有的解法可能爆机, 有的解法可能刚好踩线 AC); 文章使用 Go 作为主要描述语言, 同时也会在每一道题的末尾附加其他语言描述的解法的地址及其 AC 情况(选用 Go 是因为她的代码量最少); 所有的解法都有相应单元测试用例: Go: 测试用例文件与解法同级位于同级目录下, 例如解法文件 TwoSum.go 的路径为 Windary, 则测试用例文件 TwoSum_test.go 的路径为 Windary, 所有的测试用例文件均以 解法文件名 +…