Channing Blog

一言不合就打码

SimpleDateFormat的parse方法不是线程安全的

今天在解析时间字符串时碰到了一个奇怪的问题。例如 “Fri, 31 May 2019 07:17:49 +0000”(不特只这一个,任何时间都有可能,无规律),偶尔就给 parse 成 3205 或其他的什么奇葩年份,毫无规律。无论怎么设置 SimpleDateFormat 的时区都会出现这问题。 然后突然想到,我的解析操作是批量在多线程中执行的,但是使用的都是同一个 SimpleDate...

干掉 Android 8、9 状态栏的半透明黑色

在实现透明状态栏时遇到了一个问题,在 Android 8 以后,即使设置 windowTranslucentStatus = true,api 也会强制在状态栏上绘制一个半透明黑色,为毛? 如果是纯色背景的 toolbar,可以将windowTranslucentStatus = false, 然后通过 statusBarColor 将状态栏背景和 toolbar 置为一样的颜色,但是图片...

仔细研究下Viewport

在做邮件页面适配时使用到了 viewport,都是照猫画虎用的,基本没有了解,所以写了个 sample 仔细研究了下 Viewport。测试用的设备是红米 note 4X(基于Android 7.0 的 miui) 和 mac 版的 chrome。以下所有宽度的单位都是 px(百分比除外)。 看完资料有点懵 在看两个viewport的故事时了解到,Layout Viewport(布局视口...

EditText wrap_content 光标挤压文本

记录在实现邮箱地址栏输入控件时遇到的适配问题。 Bug 自定义的地址栏输入控件中,负责文本输入的是一个EditText,其 layout_width 设置为 wrap_content,以便文本输入时自动将宽度撑开,自动换行。 但在魅族手机上出现bug,文本输入时开头有一部分被遮挡,无法正常显示,如下图所示。 原因 排除 singleline、padding、maxline 等原...

Traslucent StatusBar 适配总结

总结Translucent的实现过程及需注意的问题。 适配目标 android 4.4 SDK 开始支持Translucent StatusBar的配置,所以 4.4 是一个分水岭。 android 4.4 以下:正常显示content、drawer layout的nav,不被StatusBar遮挡。 android 4.4 :StatusBar全透明,content、drawe...

gradle问题记录

记录gradle使用时遇到的问题。 粗记,待编辑 compile报错 直接写的compile语句依赖design包,一直compile() method not found的错误,包名和版本号都正常。 解决过程是:不直接写complie语句,在Project Structure–》module–》Dependencies找到design包添加,build之后再改成想要的版本号就正常了。...

邮箱地址栏实现历程

记实现邮箱地址栏的实现历程。 粗记重难点,待编辑 需求1、类似自动换行标签控件 自定义TabLayout,重写onMeasure和onLayout方法,onMeasure中根据子控件宽度计算总行数,从而计算出布局高度。onLayout方法中,依次布局子控件的左上右下。 需求2、该布局为可输入控件,点击确认添加一个地址Item 继承TabLayout实现AddressTabLayou...

ssh-config配置

之前遇到这样的一个问题:我有两个github账号,一台电脑上都要访问这两个账号,都使用ssh key认证方式,该怎么配置ssh? ssh的配置文件 ssh client有两个配置文件,/etc/ssh/ssh_config和~/.ssh/config,前者是对所有用户,后者是针对某个用户,两个文件的格式是一样的。 ssh配置文件的格式 每一行是一个配置项,如下: config va...

Project视图下多module归类合并

强迫症患者的纠结

使用Android Studio开发项目一般会依赖多个module,如果module太多的话,在project面板下会显得非常乱,而且不方便查找管理。 最开始尝试强行将这些module拖到一个文件夹下,但是编译就报错了(肯定不是这么无脑啦),一直也没找到好的解决办法,所以就把module的name都加上lib前缀,好山寨的感觉。如下图所示: 直到前几天在google的一个sample...

Gson遇上泛型

Gson中使用泛型 例:JSON字符串数组 [“Android”,”Java”,”PHP”] 当我们要通过Gson解析这个json时,一般有两种方式:使用数组,使用List。而List对于增删都是比较方便的,所以实际使用是还是List比较多。 数组比较简单 Gson gson = new Gson(); String jsonArray = "[\"Android\",\"Java...