我在去年曾经写过一篇类似的《使用 Drawable 实现小红点》,但是小红点的具体实现是在这个类里面的。这次是在其思路上进行扩展,使得小红点或者说是角标的样式更加灵活。
在一些图标的右上角添加小红点,是我们开发中很常见的场景,比如下图所示,底部 TAB 会有小红点,上面的功能图标也会有小红点。
more >>一直难以忍受在做 Code Review 时,Phabricator 无法对 kotlin 代码进行高亮显示,直到今天项目的阶段性开发终于告一段落进入测试,于是着手处理该问题。
Phabricator 对语法高亮有两种支持方式,一种是其自带的高亮,还是一种是对 pygments 的集成。在 Phabricator 的设置界面上提到,如果想支持更多种语言的语法高亮,可以启用 pygments,于是我就配置为使用 pygments。
more >>我在做的一个项目需要有换肤功能,换肤的方案是采用第三方库 ThemeSkinning 的实现(在其基础上修复若干 bug)。皮肤的制作是把相关的资源放在一个 app module 中打包成 apk,当然资源的命名要和原有项目中的命名一致。目前的皮肤加载方式,是把皮肤包放到 assets 中去加载。这是背景一。
背景二,这个项目是我所接手过来的。虽然表面上是使用了皮肤加载库,但是项目中还有大量遗留的没有使用皮肤库的写死的代码,都是判断当前主题是哪一个,然后返回默认资源或者是指定皮肤的资源。这些代码都类似如下:
我是在元旦之时意识到发生在我身上的这个严峻的问题的。
那时跟我家橙子及她朋友们一赶快到佛山玩几天,最后一天是回到广州去了一个地方摘草莓。当时我和小橙子一组,他们一对一组,摘了一会儿我就停下来了。
我望着面前一排排田垄,不禁停下来思考一个问题:我站在一条沟槽中,可以摘两边也就是两排的草莓;把这个草莓园视为一个二维数组,每个元素上都可能会有我们想摘的草莓,那么摘完所有的草莓其实就是把这个二维数组遍历一遍。而实际上,我们不是果农,我们也不会摘下所有成熟的草莓,我们可能只是摘个两三斤就满足了,所以问题是如何以最短的路径遍历尽可能多的元素。说到这里,那么答案也很简单,“之”字形走一遍就好了。但其实条件不仅仅是这样,我们要考虑最优解,也就是尽可能地优化这个结果,那么就得考虑到我们目标完成之后所处的位置应离出口尽可能的近。
本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的。
先说一下背景。
我负责的一个项目,对一个图表库有外部依赖。这个图表库是我在维护的,由于新功能在开发中,所以我就使用了 SNAPSHOT 版本发布到 OJO(oss.jfrog.org) 上。我在项目中刚更新了依赖,忽然想到还少几个 API,于是发布了 SNAPSHOT 版本。
故事就这样开始了。
在我的目前阶段,许多开源项目的产生都是直接来源于项目本身的需求,比如这次要讲的读取短信验证码的封装库。
项目目前挂在 github 上的公司组织下,地址为:https://github.com/parkingwang/sms-captcha。使用方法很简单,在界面创建时注册:
1 | mCaptchaObserver = SmsCaptcha.with(this) |
界面销毁时移除注册:
1 | mCaptchaObserver.unregister(); |
在经过上一次尝试剖析源码后,我意识到自己并没有一种比较好的方式去讲解代码,从而无法把自己所知道的知识更好地输出。所以接下来,至少在源码讲解有新想法前,我都不会再去尝试,也尽量减少博客中的非核心代码,而以思路及想法为主。另外,我也将尝试改进技术博客的笔法,段落之间尽量连贯,整体内容尽量有节奏感,目标是做到深入浅出地表达出主题相关内容。
从 Android 6.0(API 23)开始,用户可以在应用运行时向其授予权限(6.0 以下,国内厂商也多数做了类似的权限管理),而不是在应用安装时授予。这一方法既可以简化应用的安装过程,也可以让用户对应用的功能进行更多的限制。
在 Android 系统中,系统权限分为两类:正常权限以及危险权限。其中正常权限是不会直接给用户隐私权带来风险的,如果应用在其清单中声明了该权限,则系统会自动授予该权限。而危险权限,从 6.0 开始,而需要应用动态申请,并且由用户授予。
more >>tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true