zhuhf Blog

路漫漫其修远兮

实现可在 RecyclerView 中展开和收缩的 TextView

##前言&常用做法 效果类似微信朋友圈 - 查看全文的“展开”和“收缩”效果,这里就不贴图了,相信大家都不会陌生。 一般情况下,第一个想到的做法是通过 TextView#setMaxLines(int maxLines) 来控制 TextView 显示的行数。 了解 View 模型的同学都知道,在 View 没有“呈现”之前,我们是无法获取到当前 TextView 显示的文字的...

《从0到1:实现 Android 编译时注解》

前言 我们经常使用的一些第三方框架,比如:butterknife,通过一行注解就可以实现View 的“自动赋值”。 那么,这其中的原理是什么呢? 为了带大家更好的深入了解,本文将打造一个简单的 Demo,来说明这其中的原理。 Demo 虽然简单,但是完全按照 butterknife 实现的方式和原理打造。 实现思路 我们先看 Demo 的效果: public class ...

谈谈“adjustResize”在沉浸式状态栏下的失效问题

前言 关于“沉浸式”的介绍,请看另外一篇文章:刨根问底-论Android“沉浸式”,文章中详细介绍了“沉浸式”的相关知识,最后给出了Android 4.4 及以上“状态栏着色”的适配方案。 这里简单介绍下,一共分为两步: 在主题中增加以下属性,这会使得“状态栏”透明。 values-v19/styles.xml: <item name="android:wind...

探究 ViewPager 使用 Fragment 无法刷新的原因

本文将从源码角度探究 ViewPager 使用 FragmentPagerAdapter、FragmentStatePagerAdapter 无法刷新的原因,以及对应的解决方案。 让我们先从一个简单的例子入手,请看下面这一段代码: public class FragmentStatePagerItemAdapter extends FragmentStatePagerAdapte...

Tomcat7 Maven Plugin 小记

本文记录的是在 Mac 下使用 IntelliJ IDEA, 集成 tomcat7-maven-plugin 插件实现一键部署的过程。 安装 Tomcat 你可以在这里下载到 Tomcat 的各个版本,http://tomcat.apache.org/。 这里选择 8.5.14 zip 免安装版,它可以在 Windows、Linux、Mac 上使用。 解压缩 zip 包到磁盘任意位...

Android O 新特性 - Background Execution Limits

为了节省系统资源(内存、电量、流量等),提升手机流畅度和用户体验,Android O 对程序“后台运行”的限制变得更加严格,具体体现在两个方面: 限制后台服务 当我们的程序处于“空闲”状态,“后台服务”会被限制执行,但是这不影响“前台服务”。 限制广播 程序不能在Manifest中注册“限制性”广播,但仍然可以动态的去注册。 注意:如果 targetSdkVe...

CoordinatorLayout 完全解析

一、CoordinatorLayout 的作用 CoordinatorLayout 作为一个 “super-powered FrameLayout”,主要有以下两个作用: 作为顶层布局; 作为协调子 View 之间交互的容器。 使用 CoordinatorLayout 需要在 build.gradle 加入: compile 'com.android.support:desi...

AOP 之 AspectJ 全面剖析 in Android

AspectJ 是 Android 平台上一种比较高效和简单的实现 AOP 技术的方案。 相类似的方案有以下几种: AspectJ: 一个 JavaTM 语言的面向切面编程的无缝扩展(适用Android)。 Javassist for Android :用于字节码操作的知名 java 类库 Javassist 的 Android 平台移植版。 ...

ViewDragHelper实战:APP内“悬浮球”

本文的理论知识是基于:Android自定义ViewGroup神器-ViewDragHelper,如果你对ViewDragHelper的使用不熟悉,请先阅读这篇文章。 前言 “悬浮球”最初是iPhone手机上的一个虚拟按键,它会悬浮于所有APP之上,手指随意拖动,松开后会自动贴边显示。现在满大街都是iPhone手机,相信大家都用过或者看过这个效果,这里就不上图了~ 当前,很多An...

聊一聊 WebView 与 JS 交互方案 - 适用 Android & iOS

webview 与 JS 交互分为两种: Android & iOS 调用 JS 的方法 JS 调用 Android & iOS 的方法 Android & iOS 调用 JS 的方法,伪代码如下: Android webView.loadUrl("javascript:show('xxx');"); iOS ...