- 博客(100)
- 问答 (2)
- 收藏
- 关注
原创 Android中focusableInTouchMode会导致第一次点击事件失效
我们很多时候会对某些View设置点击事件,但是,当对这个View同时设置了。,在Activity代码中对View设置点击事件。会被消费为为此View获取焦点。创建一个View,并同时指定了。
2024-05-31 14:08:04 476
原创 Android Baidu地图SDK只展示蓝背景,没有绘制内容问题解决
项目里接入了Baidu地图SDK,用于展示信息、选点。在一个新的Activity中,引入了,用于地图展示。选点过程有两个页面。A页面中有一个不能滑动的地图,只是用来展示,没有其他任何操作。点击A页面中的地图,进入全屏的地图页(B),进行选点,选好点之后,跳回到A,并回传选好的点。页面A:区域展示选择的地图位置页面B:用于选择位置在A跳转B,整个过程执行3次之后,再回到A时,地图变蓝,再跳转到 B,B页面的地图也变蓝。执行过程:A页面, 点地图,跳转到B,选点,返回。再执行上一步。
2024-05-25 11:39:56 260
原创 Baidu地图SDK接入后的点击事件实现。
在很多APP中,我们接入了百度地图,而这个百度地图只是拥有提示、展示的作用,并不希望它具有操作功能。比如,在外卖APP中,粗略地展示一下地理位置,点击地图后,直接跳转对应的导航。于是这样写到
2024-05-25 11:38:54 649
原创 Android 构建时:Manifest merger failed : Attribute application@name value
如果当前已经存在了其他需要,replace的东西, 就在后边追加,以。解决方案:在主Manifest中增加replace。
2024-05-24 16:19:06 272
原创 Flutter 升级build_runner版本后,报 Logger.onLevelChanged错误
Flutter升级了BuildRunner版本之后,报错如下图。
2024-05-09 16:57:47 355
原创 EditText与NestScrollView嵌套使用时,滑动冲突处理
在Android开发中经常会有在一个大页面中,包含一个EditText的情况,一般情况下,大页面会通过或者ScrollView当作根View。
2024-04-28 16:21:47 1255
原创 Kotlin泛型之 循环引用泛型(A的泛型是B的子类,B的泛型是A的子类)
我们来看一下Java接着我们看IDE的提示:意思是其实和Kotlin提示的差不多,希望你指定一个泛型类型,而不是直接使用这个类。在Java中,为了解决这个提示,可以使用?。>> {>> {当我们在后边的泛型中加入?来规定一下泛型,编译器就不会提示错误和警告。我们尝试在Kotlin的代码中实现增加上界的方式: 我们知道kotlin 的通配符对应着java中的?,那我们模仿一下Java的方式不就行了吗?然后我又尝试了很多方式都不行。
2024-04-28 12:49:58 1326 3
原创 ViewPager2引起的Wrong state class, expecting View State but received class
在文章中我知道,这个问题是 因为 视图树中存在两个id相同的View,并且在恢复数据时出了问题。但是页面中我们明明都是指定了id,按道理来讲是不会出现重复的呀?通过模拟与查看源码发现,我们虽然给ViewPager2指定了Id,像这样:我们都知道ViewPager2是由RecyclerView实现的,其内部还有一个View,就是RecyclerView,她的RecyclerView的id,并不是通过指定的方式确定的,而是通过一个方法自动生成的。如果在整个视图中,有一个View的id是和。
2024-04-25 12:55:47 1383
原创 自定义View时,如何使用onSaveInstanceState与onRestoreInstanceState
当我们直接继承View进行自定义时,可以通过重写两个方法,并保存与恢复对应数据。
2024-04-25 12:52:06 864
原创 Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)
在Android的组件Activity中,有这样一对方法:和这两对方法,可以让我在Activiy被销毁时,保存状态;以及在Activity重建时,恢复状态。比如:当我们在输入框中输入了内容,此时因为种种原因,将App退至了后台。这个处于后台的App很有可能因为内存不足、其他配置,被系统杀死。当我们恢复这个页的时候,希望它能够保存住我们原来输入的内容。除了,我们自己手动保存,也可以利用系统的和那么,在Android已有的系统中,是如何做的呢?
2024-04-25 11:52:37 613 2
原创 新版AndroidStudio的Gradle窗口显示task list not built 问题解决
在使用新版AndroidStudio时,会出现,的问题。如果你记得task的名字,当然可以 直接通过命令或者直接执行即可,但是若是记不住,还是把这个任务构建处理比较好用。
2024-03-08 12:48:21 2999
原创 使用KMP(kotlin多平台)开发Compose,如何打包成可执行文件?exe、DMG……
上一次的分享中,我分享了,如何在windows平台上直接通过IDE运行compose。使用的方式是:双击ctrl,然后,执行gradle run有朋友问,我是能够执行了,但是这毕竟是调试方式,它还不是一个可以分享给别人的可执行文件呀,我写一个程序,只能在自己电脑上运行,那没啥意义呀。那今天我分享一下,如果将compose的代码,打包成一个Windows平台的可执行文件(其他平台同理,看一下就知道)。
2024-03-05 12:03:50 3608 3
原创 使用KMP(kotlin多平台)在windows上出现:Cannot locate tasks that match ‘:composeApp:compileJava‘ as task ‘compil
kotlin 多平台在windows上运行失败解决方案
2024-01-26 10:59:38 930 7
原创 数据结构与算法:插入排序
arr[i]和arr[i-1]比,若 arr[i-1] 大于arr[i],交换两个值。arr[0]和arr[1]对比,若arr[0] 大于 arr[1] ,交换两个值,arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。时间复杂度 O(n²)
2023-12-14 00:51:07 125
原创 数据结构与算法:冒泡排序
arr[i] 和 arr[i +1]对比,若arr[i]大于 arr[i+1],交换两个值。arr[n-2]和arr[n-1]对比,若arr[n-2]大于arr[n-2],交换两个值。arr[0] 和 arr[1] 对比,若arr[0] 大于 arr[1], 交换两个值。arr[1] 和 arr[2]对比,若arr[1] 大于 arr[2], 交换两个值。arr[2] 和 arr[3]对比,若arr[2]大于 arr[3],交换两个值。确定出 arr[1]的值,同时确定了arr[0]的值。
2023-12-14 00:49:42 104
原创 数据结构与算法:选择排序
每次都要在剩余未排序的集合中,找到那个最小(或者最大)的值,放到当前位置。从当前位置到最后,找出最小(或者最大)值,放在当前位置,位置后移。第i次:找到 i ~ n-1范围内最小值,放在i 位置。第一次:找到0 ~ n-1范围内的最小值,放在0位置。第二次:找到1 ~ n-1范围内最小值,放在1位置。最小或者最大,影响的是降序还升序。额外空间复杂度 O(1)时间复杂度 O(n²)
2023-12-14 00:48:24 150
原创 数据结构与算法:衡量算法好坏的指标——复杂度
复杂度,用来分析算法执行过程中,所需要的资源。时间复杂度是衡量所需要的时间。空间复杂度,是衡量所需要的(内存)空间。
2023-12-14 00:46:15 371
原创 MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)
买了一个显示器,想给mac做分屏使用,结果连上之后发现,整个屏幕像是被蒙上了一层紫色的蒙版。
2023-11-17 10:54:22 8827
原创 在项目中增加网络加载需要考虑什么?
一般文件校验失败了,也就证明当前缓存是有问题的,或者中间被人篡改了。这时根据当前文件是缓存还是直接下载的文件,去做对应的处理。如果是缓存文件,会直接删除重新下载,如果非缓存文件,可能提示出错等。既然是缓存,就需要考虑缓存的清理策略。对于磁盘缓存来说,如果你的项目中已经存在磁盘缓存,可能需要将当前的缓存文件类型,纳入到原来的缓存管理中,进行统一处理。我们熟知的缓存策略可能就是Glide中的图片三级缓存策略了。网络加载的第一步肯定是下载,那么选择一个合适的下载器是十分重要的,这个下载器最好支持什么功能?
2023-08-12 23:26:10 270
原创 腾讯出品Pag动画框架在Android端的使用-网络Pag加载
在我们可以通过assets的方式加在pag文件之后,我们会考虑下一个问题,可不可以用Pag框架加载网络文件?为什么会有这样的问题出现,或者说网络方式加载可以解决什么问题?APK 体积增加问题当一个项目规模比较大的时候,会做很多优化工作,其中「APK瘦身」便是一项优化点。通过网络的方式加载可以减少内置文件,从而降低APK大小。热更新问题我们有时候是有这样的需求的,线上更改动画效果,通过网络方式便可以做到。新的功能或者组件上线,需要更新客户端问题。
2023-08-12 23:23:41 1917
原创 腾讯出品Pag动画框架在Android端的使用-初级
Pag动画框架作为一个第三方框架,它的优缺点与Lottie是相似,此处不过多赘述。如果你们的项目中打算用了,肯定是经过了一定的调研的。Pag动画框架分几个版本,有免费的有收费的。我们目前用的社区免费版,只用来展示Pag动画。高级的版本可以播放视频、声音等,酌情选取。
2023-08-12 23:21:36 1916
原创 非原生动画框架在Android端的使用
在Android平台上,除了我们熟知的属性动画(Animator),View动画(Animation),后面出的Transition动画,还有其他第三方出的动画库可以供我们使用:Lottie(Airbnb)、Pag(腾讯)与Lottie相比,Pag的优势在于,只需要一个pag文件即可(整体打包)。我们的项目中用过lottie 动画,现在在逐步使用Pag动画。文档:http://airbnb.io/lottie/#/方便云控,可以通过下载动画文件,更新动画。有一定的可复用性,通过替换文件实现。
2023-08-12 23:15:18 173
原创 Gradle build 失败后提示.lock文件,解决办法
在Gradle build失败之后时,有时候强制关闭AndroidStudio,再次打开build时,会提示各种.lock 文件问题,删除了一个还有下一个,而且路径不一样。一般情况下是这两个文件夹下的lockfile影响继续build。
2023-07-28 15:21:03 1463
原创 Android TextView 展示特殊字符高度变高问题解决
在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。效果如下:很明显,带特殊字符的高度,会非常高!
2023-06-27 21:42:20 1587
原创 PAGFile手动设置速度失效问题处理
变速播放:首先设置 PAGFile.setTimeStretchMode(PAGTimeStretchMode.Scale),然后通过 PAGFile.setDuration() 接口设置你想变速后播放的时长即可,设置比原始更长时间是慢速播放,设置更短时间是快速播放。举例:一个8s长的pag文件需要循环播放3~6s,将PAGFile添加到PAGComposition后,设置PAGFile的startTime为-3000000,duration为6000000。原运动速度为1s总时长,想改为2s。
2023-06-08 12:00:29 423
原创 Glide预加载图片preload失效问题修复!
我在preload的时候,没有传入宽高,默认按原图取,走的api是不带分辨率path 的。而当使用的地方传入了imageView,它会根据imageView的宽高,请求对应分辨率的API,导致转换后的key变了,相当于我请求的虽然是同一个地址,但是转换成了两个。结果发现,并没有想象中的预加载效果,它貌似还是走的网络加载。为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。最终发现,是因为生成的key不一样,怎么会不一样呢,我明明获取的是同一张图片!
2023-05-25 15:01:35 1195
原创 Android事件分发汇总贴
Android事件分发上是从触摸板硬件层,一直传递到当前处理的View的过程。期间涉及到跨进程通信,主线程Handler处理消息,Window传递事件,Activity传递事件等等等等。学习事件分发,让我有能力面对复杂状态下,使控件有正确的行为。之前已经写好了3篇文章,从流程,到源码分析,到实际案例演示。希望你看过之后也有帮助,可以在评论区与我探讨遇到的各种情况哦。
2023-04-03 16:58:23 104
原创 Andorid 事件分发机制案例实操与解析
根据问题的前提,我们知道这是两个RecyclerView重叠摆放的问题导致的,当然我们可以自定义ViewGroup,重新定义两个View的摆放规则,但是那不在我们本次讨论范围内,我们只考虑当前的实现方案,如何最终实现这个功能。Android 的触摸事件,是从屏幕硬件触发,最终到达目前正在展示的Activity的,至于这期间如何传递的,此处不做讨论,我们讨论的起点,从Activity接收到触摸事件开始。事件传递相关的流程与 源码分析在上面的文档中已经看到了,接下来,我们来实现一下,文章开头提到的实现目标。
2023-04-03 16:50:52 532
原创 Android 事件传递相关流程图
之前从来没有总结过Android事件传递的流程图,此处,绘制一下简版Android事件传递流程图,方便理解事件传递的过程。
2023-04-03 14:44:54 205
原创 Android 事件分发源码解析(基于API31)
View类型的组件,接收到一个事件,是用dispatchTouchEvent开始执行。若自身设置了OnTouchListener,则执行OnTouchListener的onTouch方法。根据OnTouchListener的OnTouch方法的返回值判断是否执行自身的onTouchEvent方法onTouch 返回值为false,则执行自身的onTouchEvent方法onTouch返回值为true,直接返回结果。
2023-04-03 14:34:59 620
原创 RecyclerView 滚动条不显示
RecyclerView的滚动条不显示了,代码如下。给RecyclerView 加一个background即可。
2023-02-15 10:52:35 712
原创 Android Studio 升级之后Logcat变了个鬼样子
在AndroidStudio 升级到Dolphin之后,Logcat变了。恢复到原来状态在下方。这是新增加的实验性功能,不过我感觉不如原来的好用,把前边的✅去掉就好了。
2023-02-10 15:34:52 578
原创 切换Fragment,RecyclerView滑动一下
在四个tab中,其中一个Tab下包含了一个横向的RecyclerView,每次切换到该Tab时,RecyclerView会滑动一下。只在三星 Android 8.0 上复现。
2023-01-17 10:37:16 410
原创 Serializable引起的崩溃NotSerializableException
此类中还调用了其他的类对象(也就是上文中的VipInfo),调用的类对象必须一并实现Serializable。在Android中使用时,我将它作为一个参数,通过Bundle传递给Fragment,但是在序列化时报错了。
2022-12-28 10:29:08 373
原创 Kotlin调用Java代码时引起空指针异常,要怎么避免?
在Android项目中,经常会出现Kotlin 代码调用Java代码的情况,而在Kotlin编译器中,有这样一个默认的规定,如果Java中的代码被Nullable标记才认为是可控类型,否则, 如果你不指定为可空类型,利用类型推断会直接断定为非空类型。在Java里边最麻烦的便是空指针异常,而即使转到了Kotlin,当调用Java 代码时,仍然会存在这样的问题。注释,包括Android框架中的代码,也不是所有的地方都加了该注释,这样不利于Kotlin编译器进行类型推断,当没被。
2022-11-25 16:54:38 1144
原创 Android 通过ContentResolver添加CalendarEvent,删除后在某些机型上依然存在问题
App添加日历提醒功能,添加到系统日历中,网上有很多例子,可以参考,在我的测试机上,点击开关时,去添加事件(同时添加提醒时间),点击关闭开关时,去删除事件(同时删除提醒)。在某些机型上,即使删除了事件,还是能查询得到事件,但相关提醒已经删除了。在判断事件是否存在时,同时判断,是否已经删除~~开关状态通过 判断事件是否存在来判断。projection中 添加。在查询的实体中,添加。
2022-09-19 15:14:23 582
gradle lock文件清除
2023-07-28
清除gradle产生的 lock文件脚本
2023-07-28
Chrome插件-M3U8 Downloader
2023-03-15
如何在开发阶段将代码尽量尽量做到完美?
2017-11-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人