Bakumon's Blog

ViewPager 高度 warp-content 无效几种解决方案

当 ViewPager 的高度需要使用 wrap_content 来做自适应的时候,发现其实并不能达到 wrap_content 的效果,而是等同于 math_parent。也就是说 ViewPager 设置 height=wrap_content 是无效的。怎么办呢?我们可以在 ViewPager 的 onMeasure 方法上进行必要的修改。 解决方案1: onMeasure 方法中先遍历所有的 childView 找出它们的最大高度,然后构造合适的 MeasureSpec,调用父类里已有的测量逻辑绘制 ViewPager。 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSp... 阅读更多...
0 阅读

Github Pages 自定义域名开启 https

博客从 typecho 又迁回了 Github pages,不过这次不是用的 Hero,而是 Github pages 默认支持的 Jekyll,Jekyll 相比 Hero 可以不用生成静态网站 html 文件,而只需要源码,由 github 负责生成。github pages 模式可以开启 https,但是必须是 username.github.io 的二级域名,对于自定义域名 github 并没有提供支持,国内的 coding 却是支持的。本篇文章记录如何利用 Cloudflare 的免费 CDN 服务为自定义域名的 github pages 开启 https。 自定义域名 自定义域名比较简单,首先在 username.github.io 的仓库根目录下创建一个 CNAME ... 阅读更多...
0 阅读

设计模式-抽象工厂模式

工厂方法模式通过引入工厂等级结构,解决了简单(静态)工厂模式中工厂类职责太重的问题,但是也存在一个问题: 工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类。 此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是抽象工厂模式的基本思想。 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 理解抽象工厂必须先理解以下几个角色: 产品等级结构:即产品的继承结构,如按钮(Button),子类有扁平风格按钮(FlattenedButton)、MD风格按钮(MDButton)... 阅读更多...
0 阅读

设计模式-工厂方法模式

简单(静态)工厂模式,虽然实现了图形对象的创建和使用的分离,但是缺存在两个问题: 工厂类过于庞大,存在过多 if else 或 switch 语句,导致维护困难 系统扩展不灵活,增加另外一种具体的图形类时,就不得不修改工厂类 有什么办法可以解决这两个问题呢?工厂三巨头之一的工厂方法模式就可以解决,也就是这篇文章介绍的设计模式。 简单工厂模式中,所有的产品都由同一个工厂创建,导致该工厂职责过重,更好的方式,自然能想到每一个产品使用一个特定的工厂来创建,建立具体产品类和具体工厂类的一一对应关系,工厂类也可以像产品类那样抽象出共同的父类。 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模... 阅读更多...
0 阅读

定制 Android Chrome 浏览器 appbar 和 statusbar 的颜色

一开始使用 Android Chrome 浏览器时,这货给人的感觉就是简洁到几乎什么都没有,就连状态栏都没有适配,还处于黑暗时代。不过,用过一段时间后,才发现自己的认识是多么的肤浅,Chrome 其实是深藏不漏。首先首页是有东西的,如果科学上网了,就可以看到 Google 搜索,上拉还会出现资讯;状态栏也不是一直处于黑暗状态,在打开个别网站,如,jianshu.com ,它的状态栏和appbar颜色就会变成骚气的简书橙,如下图: 那么怎么让自己的博客也可以自定义 Chrome 环境下的状态栏和appbar颜色呢? 其实很简单,只需要在网页的 <head> 标签加入如下 meta: <meta name="theme-color" content="#0c59... 阅读更多...
0 阅读

设计模式-简单工厂模式

简单工厂模式由于工厂类中的方法为静态,所以又叫静态工厂模式。简单工厂模式并不属于 23 个经典设计模式,但是因为其设计思想简单,较为常用,所以作为学习其他工厂模式的基础。 简单工厂模式适用的场景是,但你需要某个对象,只需要传入一个正确的参数,就可以获取到所需对象,而不必知道该对象的创建细节,创建细节被简单工厂对外屏蔽。 简单工厂模式的使用流程如下: 首先会有几个相似的、可抽取出公共代码的类,称之为 具体产品类,如圆形和正方形,而将它们的公共代码抽象到一个 抽象产品类 中,每一个具体产品类都是抽象产品类的子类,然后提供一个 工厂类,该工厂类有一个可以根据传入的参数不同而创建不同的具体产品对象,并且该方法可为静态,客户端只需要调用工厂类的工厂方法并传入正确的参数即可得到一个具体产品对... 阅读更多...
0 阅读

aapt finished with non-zero exit value 127 解决方法

今天在 Ubuntu 上开发时遇到了 aapt 的错误: aapt finished with non-zero exit value 127 在 stackoverflow 上找到了解决方法,地址戳这里 原来是因为 64 位电脑上 32 位的兼容问题,开始安装 studio 的时候,已经安装过了一些兼容库,很奇怪怎么会丢失没可能是那次运行 apt-get clean 等清除命令误删了吧。 解决方法,安装如下库即可: sudo apt-get install lib32z1 sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6 阅读更多...
0 阅读