Android Notes
文章平均质量分 55
Android 相关的笔记,学习笔记,采坑笔记
GitHub :
https://github.com/Ung8023/AndroidNote
最爱吃葡萄
Ung------
展开
-
Android中focusableInTouchMode会导致第一次点击事件失效
我们很多时候会对某些View设置点击事件,但是,当对这个View同时设置了。,在Activity代码中对View设置点击事件。会被消费为为此View获取焦点。创建一个View,并同时指定了。原创 2024-05-31 14:08:04 · 398 阅读 · 0 评论 -
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 · 201 阅读 · 0 评论 -
Baidu地图SDK接入后的点击事件实现。
在很多APP中,我们接入了百度地图,而这个百度地图只是拥有提示、展示的作用,并不希望它具有操作功能。比如,在外卖APP中,粗略地展示一下地理位置,点击地图后,直接跳转对应的导航。于是这样写到原创 2024-05-25 11:38:54 · 534 阅读 · 0 评论 -
Android 构建时:Manifest merger failed : Attribute application@name value
如果当前已经存在了其他需要,replace的东西, 就在后边追加,以。解决方案:在主Manifest中增加replace。原创 2024-05-24 16:19:06 · 227 阅读 · 0 评论 -
EditText与NestScrollView嵌套使用时,滑动冲突处理
在Android开发中经常会有在一个大页面中,包含一个EditText的情况,一般情况下,大页面会通过或者ScrollView当作根View。原创 2024-04-28 16:21:47 · 1073 阅读 · 0 评论 -
Kotlin泛型之 循环引用泛型(A的泛型是B的子类,B的泛型是A的子类)
我们来看一下Java接着我们看IDE的提示:意思是其实和Kotlin提示的差不多,希望你指定一个泛型类型,而不是直接使用这个类。在Java中,为了解决这个提示,可以使用?。>> {>> {当我们在后边的泛型中加入?来规定一下泛型,编译器就不会提示错误和警告。我们尝试在Kotlin的代码中实现增加上界的方式: 我们知道kotlin 的通配符对应着java中的?,那我们模仿一下Java的方式不就行了吗?然后我又尝试了很多方式都不行。原创 2024-04-28 12:49:58 · 1276 阅读 · 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 · 1247 阅读 · 0 评论 -
自定义View时,如何使用onSaveInstanceState与onRestoreInstanceState
当我们直接继承View进行自定义时,可以通过重写两个方法,并保存与恢复对应数据。原创 2024-04-25 12:52:06 · 762 阅读 · 0 评论 -
Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)
在Android的组件Activity中,有这样一对方法:和这两对方法,可以让我在Activiy被销毁时,保存状态;以及在Activity重建时,恢复状态。比如:当我们在输入框中输入了内容,此时因为种种原因,将App退至了后台。这个处于后台的App很有可能因为内存不足、其他配置,被系统杀死。当我们恢复这个页的时候,希望它能够保存住我们原来输入的内容。除了,我们自己手动保存,也可以利用系统的和那么,在Android已有的系统中,是如何做的呢?原创 2024-04-25 11:52:37 · 488 阅读 · 2 评论 -
在项目中增加网络加载需要考虑什么?
一般文件校验失败了,也就证明当前缓存是有问题的,或者中间被人篡改了。这时根据当前文件是缓存还是直接下载的文件,去做对应的处理。如果是缓存文件,会直接删除重新下载,如果非缓存文件,可能提示出错等。既然是缓存,就需要考虑缓存的清理策略。对于磁盘缓存来说,如果你的项目中已经存在磁盘缓存,可能需要将当前的缓存文件类型,纳入到原来的缓存管理中,进行统一处理。我们熟知的缓存策略可能就是Glide中的图片三级缓存策略了。网络加载的第一步肯定是下载,那么选择一个合适的下载器是十分重要的,这个下载器最好支持什么功能?原创 2023-08-12 23:26:10 · 250 阅读 · 0 评论 -
腾讯出品Pag动画框架在Android端的使用-网络Pag加载
在我们可以通过assets的方式加在pag文件之后,我们会考虑下一个问题,可不可以用Pag框架加载网络文件?为什么会有这样的问题出现,或者说网络方式加载可以解决什么问题?APK 体积增加问题当一个项目规模比较大的时候,会做很多优化工作,其中「APK瘦身」便是一项优化点。通过网络的方式加载可以减少内置文件,从而降低APK大小。热更新问题我们有时候是有这样的需求的,线上更改动画效果,通过网络方式便可以做到。新的功能或者组件上线,需要更新客户端问题。原创 2023-08-12 23:23:41 · 1545 阅读 · 0 评论 -
腾讯出品Pag动画框架在Android端的使用-初级
Pag动画框架作为一个第三方框架,它的优缺点与Lottie是相似,此处不过多赘述。如果你们的项目中打算用了,肯定是经过了一定的调研的。Pag动画框架分几个版本,有免费的有收费的。我们目前用的社区免费版,只用来展示Pag动画。高级的版本可以播放视频、声音等,酌情选取。原创 2023-08-12 23:21:36 · 1465 阅读 · 0 评论 -
非原生动画框架在Android端的使用
在Android平台上,除了我们熟知的属性动画(Animator),View动画(Animation),后面出的Transition动画,还有其他第三方出的动画库可以供我们使用:Lottie(Airbnb)、Pag(腾讯)与Lottie相比,Pag的优势在于,只需要一个pag文件即可(整体打包)。我们的项目中用过lottie 动画,现在在逐步使用Pag动画。文档:http://airbnb.io/lottie/#/方便云控,可以通过下载动画文件,更新动画。有一定的可复用性,通过替换文件实现。原创 2023-08-12 23:15:18 · 134 阅读 · 0 评论 -
Gradle build 失败后提示.lock文件,解决办法
在Gradle build失败之后时,有时候强制关闭AndroidStudio,再次打开build时,会提示各种.lock 文件问题,删除了一个还有下一个,而且路径不一样。一般情况下是这两个文件夹下的lockfile影响继续build。原创 2023-07-28 15:21:03 · 943 阅读 · 0 评论 -
Android TextView 展示特殊字符高度变高问题解决
在我们的项目中,展示文字是很常见的需求,但是在线上展示中发现,有些信息是特殊字符展示的,而且这些字符的高度会导致TextView的高度变高(与正常字符比)。效果如下:很明显,带特殊字符的高度,会非常高!原创 2023-06-27 21:42:20 · 1227 阅读 · 0 评论 -
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 · 323 阅读 · 0 评论 -
Glide预加载图片preload失效问题修复!
我在preload的时候,没有传入宽高,默认按原图取,走的api是不带分辨率path 的。而当使用的地方传入了imageView,它会根据imageView的宽高,请求对应分辨率的API,导致转换后的key变了,相当于我请求的虽然是同一个地址,但是转换成了两个。结果发现,并没有想象中的预加载效果,它貌似还是走的网络加载。为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。最终发现,是因为生成的key不一样,怎么会不一样呢,我明明获取的是同一张图片!原创 2023-05-25 15:01:35 · 1073 阅读 · 0 评论 -
Android事件分发汇总贴
Android事件分发上是从触摸板硬件层,一直传递到当前处理的View的过程。期间涉及到跨进程通信,主线程Handler处理消息,Window传递事件,Activity传递事件等等等等。学习事件分发,让我有能力面对复杂状态下,使控件有正确的行为。之前已经写好了3篇文章,从流程,到源码分析,到实际案例演示。希望你看过之后也有帮助,可以在评论区与我探讨遇到的各种情况哦。原创 2023-04-03 16:58:23 · 83 阅读 · 0 评论 -
Android 事件传递相关流程图
之前从来没有总结过Android事件传递的流程图,此处,绘制一下简版Android事件传递流程图,方便理解事件传递的过程。原创 2023-04-03 14:44:54 · 177 阅读 · 0 评论 -
Android 事件分发源码解析(基于API31)
View类型的组件,接收到一个事件,是用dispatchTouchEvent开始执行。若自身设置了OnTouchListener,则执行OnTouchListener的onTouch方法。根据OnTouchListener的OnTouch方法的返回值判断是否执行自身的onTouchEvent方法onTouch 返回值为false,则执行自身的onTouchEvent方法onTouch返回值为true,直接返回结果。原创 2023-04-03 14:34:59 · 576 阅读 · 0 评论 -
RecyclerView 滚动条不显示
RecyclerView的滚动条不显示了,代码如下。给RecyclerView 加一个background即可。原创 2023-02-15 10:52:35 · 644 阅读 · 0 评论 -
切换Fragment,RecyclerView滑动一下
在四个tab中,其中一个Tab下包含了一个横向的RecyclerView,每次切换到该Tab时,RecyclerView会滑动一下。只在三星 Android 8.0 上复现。原创 2023-01-17 10:37:16 · 377 阅读 · 0 评论 -
Serializable引起的崩溃NotSerializableException
此类中还调用了其他的类对象(也就是上文中的VipInfo),调用的类对象必须一并实现Serializable。在Android中使用时,我将它作为一个参数,通过Bundle传递给Fragment,但是在序列化时报错了。原创 2022-12-28 10:29:08 · 336 阅读 · 0 评论 -
Kotlin调用Java代码时引起空指针异常,要怎么避免?
在Android项目中,经常会出现Kotlin 代码调用Java代码的情况,而在Kotlin编译器中,有这样一个默认的规定,如果Java中的代码被Nullable标记才认为是可控类型,否则, 如果你不指定为可空类型,利用类型推断会直接断定为非空类型。在Java里边最麻烦的便是空指针异常,而即使转到了Kotlin,当调用Java 代码时,仍然会存在这样的问题。注释,包括Android框架中的代码,也不是所有的地方都加了该注释,这样不利于Kotlin编译器进行类型推断,当没被。原创 2022-11-25 16:54:38 · 1063 阅读 · 0 评论 -
Android 通过ContentResolver添加CalendarEvent,删除后在某些机型上依然存在问题
App添加日历提醒功能,添加到系统日历中,网上有很多例子,可以参考,在我的测试机上,点击开关时,去添加事件(同时添加提醒时间),点击关闭开关时,去删除事件(同时删除提醒)。在某些机型上,即使删除了事件,还是能查询得到事件,但相关提醒已经删除了。在判断事件是否存在时,同时判断,是否已经删除~~开关状态通过 判断事件是否存在来判断。projection中 添加。在查询的实体中,添加。原创 2022-09-19 15:14:23 · 537 阅读 · 0 评论 -
Android系统悬浮球开发,在Android12上不显示的问题排查与处理。
Android悬浮窗,横竖屏显示有问题原创 2022-08-08 20:21:20 · 3142 阅读 · 0 评论 -
「“xxxx“正在运行,可能导致系统卡顿,降低待机时间,点按关闭」处理
在Notification中添加。原创 2022-07-22 16:29:26 · 549 阅读 · 0 评论 -
None of the following candidates is applicable because of a receiver type mismatch
Unresolved ReferenceNone of the following candidates is applicable because of a receiver type mismatch:* internal val File.root: File defined in kotlin.io原创 2022-06-30 15:51:40 · 3432 阅读 · 1 评论 -
Java中子类继承父类,父类中定义定义了抽象方法,子类在实现时,给子类变量赋值,执行构造后,变量值恢复成默认值
定义了一个抽象类()如下,目的是提供通用接口,在创建时会调用initData方法。2、创建实现类3、调试并验证按照我的预期,结果应该是:但是结果却是:表现出来的现象是,代码执行完init赋值之后,又被赋值回初始值了。背景就上面的问题了,通过打断点等等一系列调试之后,发现,在子类执行完父类的构造方法之后,又将自己的属性赋值了。于是推测,是子类属性赋值与父类构造方法的执行顺序导致的问题出现:我发现,在invokespecial处是执行父类构造方法,执行之后,果然在下面又对自己的属性赋值了初始值。既原创 2022-06-13 12:14:28 · 1497 阅读 · 0 评论 -
MotionLayout切割子View
问题描述使用MotionLayout,高度设置为wrap_content, 增加padding,内部一个子View为TextView,发现先试试TextView下半部分被切割!源码<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2022-05-07 20:23:17 · 228 阅读 · 0 评论 -
「解决问题系」AndroidStudio出现代理错误‘‘you have JVM property “https.proxyHost“ set to “xxxxxx““
问题描述背景:系统 MAC OS前几天强制关闭了Charles,整个电脑不开启Charles无法上网,猜测是因为电脑中的代理问题,删除了代理之后上网正常,但是打开AS(AndroidStudio)Gradle无法下载包,并提示”you have JVM property “https.proxyHost” set to “xxxxxx”“控制台有如下输出,很明显是代理问题。”Caused by: org.apache.http.conn.HttpHostConnectException: Conne原创 2022-04-06 18:20:47 · 5776 阅读 · 1 评论 -
Java中的线程安全(2)之互斥同步的底层原理
Java中的线程安全(2)之互斥同步的底层原理本来在理解完互斥同步之后,应该开始扒一扒Lock的源码了,但是在真正进入源码阶段之前,需要先按照常人的思维去理解一下,如果,让我们自己实现一个这样的互斥同步,我们该如何实现互斥同步呢?互斥同步都需要什么呢?首先,我不是所有代码都需要互斥访问,那么在需要互斥访问的地方,我需要有一个标记,证明我的代码是要互斥访问的。其次,我需要一个标志位,来控制这段互斥访问的代码,是否正在被别的线程访问着。如果多个线程都想要访问这段代码,需要一定的机制,让非正在访问的线程原创 2022-04-06 11:04:58 · 2688 阅读 · 0 评论 -
Java中的线程安全(1)之互斥同步
Java中的线程安全(1)之互斥同步最近的一段时间见一直在研究线程安全的实现原理。以前知道Java给提供了synchronized关键字和JUC工具包可以用来实现线程安全访问。当时我就有一些疑问,为什么需要这样的工具?而以上的这两种方式分别是怎样保证的线程工具?总结下来就是这样两个问题:synchronized关键字是来解决什么问题?为什么它能解决这样的问题?有了synchronized为什么又出了Lock?1. synchronized关键字是来解决什么问题?在解释这个问题之前,先看原创 2022-03-17 20:04:10 · 703 阅读 · 0 评论 -
Handler到底是一个什么东东
Handler到底是一个什么东东作为一个Android开发工程师,Handler简直是必须要了解的东西。每次面试前,Handler都会悄悄地钻到耳边对我说:“嘿,哥们,老地方见!”果然,面试又问到了,而Handler又跑过来BB:“又被我难倒了吧!”(内心独白,老子就不信搞不定你!)于是便有了这篇解析。先来几个问题你了解Android的Handler机制吗?(我美不呲呵的说,那必须了解,一顿白话之后就有了下面的问题)你知道Handler在安卓framework中有哪些应用吗?你知道Hand原创 2022-02-17 19:53:49 · 2989 阅读 · 0 评论 -
Flutter TextField 设置可输入多行
主需要在maxLines中传递null即可TextField( // 传递null maxLines: null,),原创 2021-12-28 15:58:53 · 3291 阅读 · 0 评论 -
Flutter TextField输入文字时,若页面刷新,会导致光标位置发生变化。
问题描述前提:使用了Provider + 输入框的形式,当输入框的数据都输入时,提交按钮显示可用,否则不可点击。定义了一个Model用于保存是否可点击状态class StatusModel extends ChangNotifier { bool _canSubmit = false; bool get canSubmit = _canSubmit; set canSubmit(bool isCansubmit) { if (_canSubmit == isCansubmit) {原创 2021-12-28 11:34:03 · 2614 阅读 · 0 评论 -
Flutter 自己封装TextField,导致在列表中数据更新时,数据显示错乱问题。
需求有一个可输入的列表,输入列表会根据选择的选项不同,而输入不同内容。比如:选择 Vip客户时,需要输入:姓名,手机号,住址,Vip时长,付款方式选择普通用户时,需要输入:姓名,手机号,住址。实现使用ListView展示所有的输入项,因为输入框具有通用性。所以做了一个简单的封装。左侧为标题,右侧为输入内容,空内容时,展示hint提示请输入。大概是这样的样式-----------------------------客户类型 ⊙Vip ⊙普通------------原创 2021-12-28 11:33:03 · 1754 阅读 · 0 评论 -
Exception in thread “main“ java.util.zip.ZipException: zip file is empty
Exception in thread “main” java.util.zip.ZipException: zip file is empty在构建flutter项目时,出现了如下错误:Exception in thread "main" java.util.zip.ZipException: zip file is empty at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1581) at原创 2021-11-23 11:08:00 · 2560 阅读 · 3 评论 -
Flutter从2.2.3升级到2.5版本之后,混合项目编译变慢
目录解决方案分析过程1、build窗口中打印了很多dependence 信息2、分析最近代码变更3、最近只进行过flutter升级4、查找flutter模块构建过程如题,Flutter从2.2.3升级到2.5版本之后,build时间非常之长,发现构建的控制台中打印了项目中的所有依赖信息,导致时间变长。解决方案找flutter SDK的存放位置,修改flutter.gradle文件:文件路径:$flutter_sdk$/packages/flutter_tools/gradle/flutter.gra原创 2021-09-23 16:42:29 · 1151 阅读 · 2 评论 -
ThreadLocal源码原理分析
What(什么是ThreadLocal)俗称线程本地变量,是一种能够在当前线程,只拿到该线程所设置的值的工具。比如一个字符串,A线程设置了“abc”,B线程设置了“def”,希望两个线程再读取时,分别是,A读取到“abc”,B读取到是“def”。Why(为什么要使用它?)想让不同线程,使用同一个变量,但是通过它来读取的值是各自设置的值。How(怎么用?)ThreadLocal<String> tl = new ThreadLocal<>();// thread1tl原创 2021-06-17 11:24:06 · 83 阅读 · 0 评论