自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 studio 部分 lamdba 报错 。observe Lamdba 报错但能运行

问题:普通 Lamdba 能用 如 view.setOnClickListener{}部分 Lamdba 爆红但能运行,如 liveData.observe(){}解决:并不是java版本落后导致,本人更新 Kotlin 插件后此问题解决Studio甚至在右下角弹出了“插件需更新”的警告弹窗,但日常被我忽略。。。尝试更新Java版本仍无法解决后才注意到它...

2021-09-02 11:59:07 1238

原创 action actionMasked 区别

本文仅介绍 MotionEvent中 action actionMasked两者在使用上的区别相同点: 都表示此次MotionEvent的事件类型-手指按下/移动/抬起不同点: action 无法直接识别第二根手指的按下与抬起,而 actionMasked 可以。action 的类型有 按下、移动、抬起,而 actionMasked 有额外两种类型: ACTION_POINTER_DOWN - “已经有手指按着了,又按下了新手指” ACTION_P...

2020-12-14 16:11:18 2476

原创 View 触摸事件分发例子

点击事件的触发流程好比去小区送快递,还不知道是谁的快递。例子对照:楼(ViewGroup)、进楼(ViewGroup.dispatchTouchEvent)、楼下门岗拦截(ViewGroup.onInterceptTouchEvent)、住户房间(View)、进住户房间(View.dispatchTouchEvent)、询问用户收不收快递(View.onTouchEvent)、询问大楼管理...

2020-03-27 15:28:03 1301

原创 集成bugly热后闪退 Unable to instantiate TinkerPatchReflectApplication. ClassNotFoundException Application

报错: java.lang.RuntimeException: Unable to instantiate application com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication: java.lang.IllegalStateException: java.lang.ClassNotFoundExceptio...

2020-03-10 18:11:59 3814 3

原创 TextView 双下划线 / 下划线粗细不同 bug解决

解决方案:不要为 textView添加下划线 paintFlag,改用SpannableStringBuilder或Spanny为文字添加下划线,这样下划线会统一到文字底fontMetrics.descent位置为何有此问题?实测发现,直接为 TextPaint 添加 Paint.UNDERLINE_TEXT_FLAG 标记是有兼容问题的,当同一行文字中同时存在中文和 英文/...

2020-01-17 12:25:55 1251

原创 ConstraintLayout 高度错误。约束布局高度错误。当ConstraintLayout互相嵌套时,高度从撑满变成自适应

ConstraintLayout约束布局嵌套约束布局时,高度又计算错误了。错误情况如下:图中红色框部分是约束布局,紫色区域是设置了高度为match_parent的 View,但实际运行效果是 warp_content。当我把内部的约束布局换成非约束布局时(图2),效果正常了。我以前也发现过这个问题,但解决办法只是嵌套时不使用 ConstraintLayout ,这个方案一点都不...

2019-12-12 21:13:00 3050

原创 obtainStyledAttributes 使用方式

简单图解:图1、一个参数的 obtainStyledAttributes函数。图2、两个参数的obtainStyledAttributes函数图3、四个参数的obtainStyledAttributes函数测试代码:<!--提取Attrs方式Demo--><!--项目的Theme--><style name="TestBa...

2019-11-04 17:09:20 4567

原创 Handler 的核心 MessageQueue 动图

前言:最近学习Handler切换线程的源码,花了两天时间终于看懂了,发现原理非常简单,就是个人的理解能力太差,如果有一张动图,一看就能明白其原理,那该多好啊,于是花了一天时间学习PS制作了几张动图。吐槽下,PS只做动图是真的麻烦,很多操作不是想象的样子,和他一比,AndroidStudio真的良心。放图:—— 切换线程来执行方法的核心思想——调用Looper.loo...

2019-10-16 09:30:42 215

原创 Android 线程间通信原理

此文章主涉及原理部分,需要已经懂得如何使用HandlerHandler众所周知,它是Android中切换线程的初始方案,可以大体分为: 主线程 -> 子线程 与 子线程 -> 主线程。《先讲一个基础的 主线程->子线程原理》使用Handler切换到子线程例子:thread {“开启线程,id:${Thread.currentThread().id}”.log()Loo...

2019-10-08 12:25:36 308

原创 依赖 core-ktx 后报错 Failed resolution of: Landroidx/core/widget/TintableCompoundDrawablesView

运行时报错:继承AppCompatTextView时 - 无法访问TintableCompoundDrawablesView使用AppCompatTextView时 - Error inflating class androidx.appcompat.widget.AppCompatTextView使用TextView时 -Failed resolution of: Landroid...

2019-09-20 10:55:37 3951 1

原创 对 LiveData 的源码分析

Q: Activity 中使用 LiveData 时,是如何保证内存不泄漏的?A: 很简单,调用 LiveData.observe 来进行监听时,observe 方法内会添加一个 Activity.onDestroy 的监听。当 Activity.onDestroy 触发时,LiveData 会 detachObserver 清空所有观察者。Q: LiveData 的生命周期直到 Activ...

2019-09-17 15:35:56 148

原创 从行情角度思考,啥是so文件

最近使用三方框架,需要导入so包,不知道应该哪个型号的,查了一堆感觉懵逼,直接记录下用以备忘。个人理解,若有不对,希望指正兼容方案:https://www.cnblogs.com/janehlp/p/7473240.html是什么: Java是有极限的,Java只在JVM虚拟机上做事,JVM无法直接操作系统,也没有提供系统API给Java开发者。 当Java无法完成任务,...

2019-06-27 21:14:06 155

原创 泛型字节码学习记录

//抛出问题泛型的类型擦除,Java与Kotlin的泛型都是假泛型,会在运行时被擦除,ArrayList<String>() 在运行时等于 ArrayList<Object>()。所以像 Gson.fromJson 这样在运行时通过类型来创建对象的操作就必须给它一个实实在在的 Class。 比如 Gson().fromJson(JsonBean.class),传...

2019-05-27 11:58:22 314

原创 hdpi不用放图了

计算公式:分辨率斜线 = ( 分辨率长 * 分辨率长 + 分辨率宽 * 分辨率宽 ) 开方dpi(每英寸点数) = 分辨率斜线 / 物理斜线长度(英寸)1英寸 = 2.54厘米我的小米6: 2017/4上市,1920*1080,5.15英寸,dpi=427.74,density = 2.67。使用 xxhdpi测试机: 2016/4上市,1920*1080,5.5英寸,d...

2019-04-29 10:47:03 315

原创 个人解答:为什么源码中的断点行会错位

解答看底部 QA环节推理过程当我调试断点到源码时,很多时候断点行数都是错位的,网上说是因为 手机SDK 与 Studio的SDK 版本不一致。但是我写的、编译的、运行的都是v28的代码,怎么断点会跑到v26的代码中呢?再说了,假如我调用v28才出现的方法时,断点不可能走到v26中的,因为根本就没有那个方法。Android手机的Android版本无法升级,固定 v26,但是我估...

2019-04-28 18:28:54 686

原创 AndroidStudio:Logcat 栏的过滤栏不见了

最近出现了这个问题,有时候开两个项目,一个有过滤栏, 一个没有过滤栏。有时候都没有过滤栏,重启也没用。解决(试出来的):1、尝试启用并停用 Split Mode (有时有效)2、尝试启用并停用 Windowed Mode (好像比较靠谱)3、尝试重启 Studio (低概率修好)4、尝试重启电脑 (有时有效)...

2019-04-28 09:10:52 15352 35

原创 让 Button 大小适应背景图

修改方法:1、在主题中添加这样属性2、修改最小宽高为0dp需注意:古老的 Button 使用的是系统的buttonStyle,无法修改,而AppCompatButton使用的是自己的buttonStyle可以修改,所以如果是自定义的Button,需要继承AppCompatButton。解决的问题:有个很常见的需求,UI给了一张图,说这是个按钮,上面有文字显示。以前...

2019-04-18 16:30:42 3517

原创 修改默认Dialog样式

1、进入 App 的主样式处2、在主样式下添加这么一行来指定默认Dialog样式3、设置默认Dialog样式结束运行时,Dialog的构造函数会执行源码,不设置themeId时,去拿dialogThem作为默认的theme。但是要注意,古老的 Dialog 类测试后发现是无效的,使用普通的AppCompatDialog是有效的。...

2019-04-17 18:44:58 4560

原创 Android resource linking failed error: resource android:attr/dialogCornerRadius not found.

升级support依赖库到28后报错:Android resource linking failedC:\D\androidProject\Zaihupro-android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values-v28\values-v28.xml:7: error: resourc...

2019-04-16 17:55:51 8755 6

原创 SynchronizedPool简述

SynchronizedPool类源码简单,5分钟即可看懂,此文仅节约4分钟看代码时间。简述:SynchronizedPool 是个对象缓存池,用法是val pool = Pools.SynchronizedPool<A>(10) // 创建容量为10的对象数组pool.release(A())//把 A 加入数组val a = pool.acquire()//从数组中...

2019-03-29 17:34:00 1039

原创 svn分支初学笔记

分支的概念比如当项目要添加一个实验阶段的功能(可能弃用),并要求功能模块不影响主干时,可以用分支将新功能写在分支中。分支与主干是相互独立的,在分支中提交的代码无法在主干中更新下来,但反过来也是如此。分支与主干的同步只能通过“合并”分支的使用当最开始创建版本库的时候,就已经出现关于分支的提示了:这里若选择创建目录结构,就会自动创建主干目录(trunk)与分支目录(branches),然而...

2019-03-13 17:56:35 2686

原创 设定Dialog宽高为何需要在Dialog.show()之后才有效

我在封装Dialog时想自己扩大Dialog宽度到屏幕大小,但无论设置View的宽度,布局的宽度还是Dialog.window的宽度都是无效的,百度后才发现需要在 dialog.show()之后再设置 dialog.window 宽度才有效,但是为什么必须在 show()之后呢? 我通过断点发现,在 dialog.show() 之前设置dialog.window的宽高会在 dialog.s...

2019-02-22 19:23:39 1370

原创 WebView延时加载url高度为 0

bug发现:有一个页面,使用 ScrollView 嵌套 WebView 和其它的一些视图展示,WebView 的 url 是从后台拿的,但我发现每次进入页面 WebView 的高度总为 0bug排查1、固定WebView高度可以正常显示2、不从后台拿url,直接给WebView指定固定url也可以显示3、等待一会儿后再给warp_content的WebView设置url,那么WebVi...

2019-02-13 14:50:13 1042 2

原创 SVN、GIT。使用记录

代码管理器笔记介绍管理规范比较版本控制模式优缺点安装下载与安装GITSVN关联AndroidStudioSVNGIT查看查询远程版本库路径操作新建项目并加入版本管理SVNGIT添加忽略文件回滚上个版本(尤其重要,当你提交了错误代码时)坑介绍管理规范https://www.jianshu.com/p/71bede890a20比较版本控制模式SVN:集中式。GIT:分布式SVN服务器猿1...

2019-01-17 15:22:10 357

原创 Le蓝牙接入记录

LE蓝牙接入记录欢迎使用Markdown编辑器什么是LE蓝牙?多说无益,先让我看看Demo吧功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程...

2018-12-27 15:19:52 2806

原创 ota / 固件更新 / 空中升级 接入记录

ota / 固件更新 / 空中升级  即 通过手机升级BLE蓝牙设备。固件更新最重要的就是参考 官方升级依赖库、与 官方使用Demo官方空中升级依赖库:https://github.com/NordicSemiconductor/Android-DFU-Library官方使用Demo:https://github.com/NordicSemiconductor/Android-nRF-...

2018-12-04 14:47:24 1133

原创 傻瓜式的解答:为什么原子运算 AtomicInteger 可以解决多线程计算临界资源错误

19-10-17 总结:对唯一的临界值 i 的操作只有一行代码:compareAndSet,我们只需要关心这行代码就能解决多线程计算问题,添加常量 current 是为了监听其它线程的干扰,一旦被干扰,current 就与 i 不同,通过 compareAndSet 就能知道已经被干扰了。compareAndSet 返回 true 意味着 i 还没有被其它线程干扰,并且已经成功操作 i,所以...

2018-11-15 16:10:49 339

原创 解决 导入三方时出现: appComponentFactory 错误

解决方案来源:https://blog.csdn.net/zxccxzzxz/article/details/82986956导入最新的三方某包后,清单文件报错:某包比如:implementation "com.github.hotchemi:permissionsdispatcher:4.0.0"Error:    Attribute application@appCompo...

2018-11-08 15:25:18 72306 22

原创 导入Module错误 Manifest merger failed with multiple errors, see logs

项目A导入项目B的LibModule。1、直接导入会提示拒绝访问,我将LibModule拷贝一份后才导入到项目A中2、导入后,LibModule并没有正确的显示成Lib的样子,像是一个文件夹摆在那里,看了module下甚至有 gradle文件夹,各种尝试后,又重新导入了一边,这次 module 下没有 gralde 文件夹了。3、LibModule仍然不是Lib的样子,Project ...

2018-09-14 15:42:24 343

原创 简单的监听软键盘缩放的一种方式(不锁定 windowSoftInputMode==adjustPan 才可用)

要达到效果:当软键盘收起,隐藏EditTex控件。要求页面不能锁定软键盘适配模式为 adjustPan,否则此方案无效步骤:1、给外层ViewGoup添加 OnLayoutChangeListener 监听,这个监听会在软键盘展开/收起时触发。但仅仅这一步并不够,会发现触发总是又一次调用延迟2、给Activity设置 android:windowSoftInputMode="a...

2018-08-28 09:06:55 633

原创 ConstraintLayout . Group、Barrier 的坑

Group 用于控制一群View的显示与隐藏。1、使用多个 Group 时,尽量不要将某个View重复的放在 多个 Group 中,实测可能会导致隐藏失效2、当 一个 View 被放到 Group 控制显隐状态时,若 Group 的状态是显示,则是没法在代码中隐藏这个 View 的(设置了GONE后能立即get到GONE,但下次get到的仍是VISIBLE,猜测是ConstraintLa...

2018-07-23 17:26:57 6174 1

原创 ConstraintLayout 中扁平使用阴影的方案

由于 ConstraintLayout  的设计理念,尽量不要在布局中使用View嵌套,可是当View需要阴影,而Android版本又不够5.0时,该如何在不嵌套的情况下做出阴影的效果呢?答:将布局分层:背景层,内容层 两个View来绘制一个View。背景层使用ShadowLayout作为有阴影效果的背景,而内容层覆盖在背景层的上层展示View的内容。如此由于内容层背景是透明的,看...

2018-07-20 17:22:59 2657

原创 LiveData 理解笔记 - 抽象例子、自动移除 source、Observer 原理

抽象理解:LiveData链式编程 = 插板value 改变 = 自身发电,每个插板都能自身发电addSource = 让此插板通过转换器插上其它插板,这些插板并不能直接连接通电,甚至不能通电,必须在插板A发电时,由插板B的连接转换器设置为(是否随着A发电)addObserver = 让插板接上电器lifecycle = 电器,分为好坏状态,可以砸坏,但无法修好0、让一个插板连接...

2018-07-20 15:23:52 3719

原创 GoogleDemo 学习

最近在看google官方的一个小项目例子,这是 google 为 2018 大会时出的新框架 lifecycle、room、navigation、work 等出的一个项目例子。https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample我看例子看着看着被 re...

2018-07-19 15:10:24 1046

原创 类内部对成员变量的操作 应该使用 getter+setter 好?还是直接使用变量好?

class User { private String name; private int age; public void ageAdd() { age++;//直接使用变量 setAge(getAge() + 1);//使用getter,setter }应当直接使用变量;从可读性的角度考虑,当查看一个成员变量的使用者时,Ctrl...

2018-07-16 10:55:08 953

原创 百度地图 Zoom 焦距程度记录

使用测试页面测试地图焦距效果:seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { val f = ...

2018-07-05 16:49:20 2654

原创 RxJava 学习笔记4 - lift()

fun start() { Observable.create&lt;String&gt; { println("onSubscribe") it.onNext("1") }.lift&lt;Int&gt; { subscriber -&gt; println("lift") //感觉像是自己手动实现 map ...

2018-07-02 17:32:27 197

原创 RxJava 学习笔记 3 - map()

fun start() { //中间的计算符 map Observable.create&lt;Int&gt; { t: Subscriber&lt;in Int&gt;? -&gt; t?.onNext(1) }.map { it: Int -&gt; return@map it + 1 }.map { it: Int -&gt;...

2018-07-02 17:26:30 238

原创 RxJava 学习笔记 2 - from(array)

fun start() { //解析 from - 多个 OnSubscribe(订阅回调) Observable.from(arrayOf(1, 2, 3, 4, 5)).subscribe { print(it) } /* 中心思想: 使用多态扩展了 OnSubscribe.call() 使其对 subscribe 的调用形式发生变化。 最终实现多次调用 ...

2018-07-02 17:19:12 1360

原创 RxJava 学习笔记 1 - 最简单的 create + subscribe

/* 首先,要知道英文单词的含义, observe(观察、说、注意到) observer(观察者) able(有能力的、能够) observable(可观察的事物、看得见的) subscribe(订阅)——常见于YouTube subscriber(订阅者)——点击subscribe,你就是youTuber的Subscriber了 onSubscribe(...

2018-07-02 17:08:02 597

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除