自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZBM来了

^_^路过的大神还望多多指教

  • 博客(50)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android笔记(四十一):TabLayout内的tab不滚动问题

假设二级页面是上面图片的布局,当进来时TabLayout和ViewPager2绑定完就马上调setCustomItem,跳转到最后一个tab页面时,会发现tab不滚动,手动滑一下ViewPager2时才会滚动tab到正确的位置。post一个Runnable再执行setCurrentItem,这时候tab已经完成测量,能拿到宽度,左边距等信息。

2024-12-26 16:05:11 426

原创 Android笔记(四十):ViewPager2嵌套RecyclerView滑动冲突进一步解决

ViewPager2内嵌套横向滑动的RecyclerView,会有滑动冲突的情况,引入官方提供的NestedScrollableHost类可以解决冲突问题,但是有一些瑕疵,滑动横向RecyclerView到顶部,按住它不放手继续往左拖再往右拖,这时候会发现外层ViewPager2滑动了,而不是横向RecyclerView滑动,于是参考NestedScrollableHost进行逻辑完善。RecyclerView也支持嵌套滑动。返回false,造成AppBarLayout没有执行scroll。

2024-12-26 15:37:22 2148

原创 Android笔记(三十九):onCreate执行Handler.post在onResume后才能执行?

由上面代码可知,ClientTransaction在Callback处添加了LaunchActivityItem(内部会执行Activity.onCreate),在LifecycleStateRequest处ResumeActivityItem(内部会执行Activity.onResume)综上分析得知,这里onCreate和onResume是在同一个消息(EXECUTE_TRANSACTION)内执行的,依照消息队列的特性,执行完该消息后才会去执行刚刚onCreate中post的消息。

2024-12-04 18:22:15 545

原创 Android笔记(三十四):封装带省略号图标结尾的TextView

项目需求需要实现在文本末尾显示一个icon,如果文本很长时则在省略号后面显示icon,使用TextView自带的drawableEnd可以实现,但是如果文本换行了则会显示在TextView垂直居中的位置,不满足要求,于是有了本篇的自定义View。indexEndTrimmed为去掉省略号图标后的文本末尾索引,以下需要进一步修正该索引,得出准确的值indexEndTrimmedRevised,将mOrigText进行文本裁剪再加上省略号图标后返回出去。这里“+”用于图片占位符。

2024-11-30 17:17:13 762

原创 Android笔记(三十七):封装一个RecyclerView Item曝光工具——用于埋点上报

项目中首页列表页需要统计每个item的曝光情况,给产品运营提供数据报表分析用户行为,于是封装了一个通用的列表Item曝光工具,用于埋点上报。

2024-11-15 15:01:46 656

原创 Android笔记(三十六):封装一个Matrix从顶部/底部对齐的ImageView

ImageView的scaleType默认显示图片是这样,但是有时候设计稿需求希望图片左右能紧贴着ImageView左右边缘,又不破坏图片的比例,用自带的matrix,centerCrop等都可以满足。但是都会造成图片的某些区域被裁剪了,如果设计稿能接受底部被裁剪,其他边区域正常显示,那系统自带的scaleType则无法满足需求。

2024-11-15 13:29:55 603

原创 Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具

项目需要在首页弹一系列弹窗,每个弹窗是否弹出都有自己的策略,以及哪个优先弹出,哪个在上一个关闭后再弹出,为了更好管理,于是封装了一个Dialog管理工具。

2024-11-06 15:02:01 658

原创 Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机

有时候需要根据设备性能返回是否低端机还是高端机,来决定某些功能或者酷炫效果是否展示,如过渡动画等,所以需要封装这样一套全局使用的工具去判断。

2024-11-04 18:25:30 527

原创 Android笔记(三十二):封装一个毫秒级别倒计时View

业务场景需要显示带有毫秒级别的倒计时,于是自己封装一个通用的倒计时组件。

2024-11-04 18:10:01 680

原创 Android笔记(三十八):Deeplink失效问题

通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层链接打开时才会重现。但是,如果再次输入相同的命令,而不终止应用程序。它只会打开应用程序,但不会打开正确的活动,并生成以下日志。在应用程序被终止后,使用上述命令,它可以打开应用程序并路由到正确的活动,没有问题。在项目的清单文件中,需要将以下内容添加到MainActivity中。

2024-11-03 18:33:41 726

原创 Android笔记(三十一):FrameLayout遇到的坑

FrameLayout内的measureChildWithMargins -> getChildMeasureSpec的子类的MeasureSpec确定规则由父类的MeasureSpec和子类的LayoutParams决定。当FrameLayout里面是match_parent的时候,如果FrameLayout是wrap_content,则里面的view也会被当作wrap_content处理。

2024-11-03 17:55:40 305

原创 Android笔记(三十):PorterDuffXfermode实现旋转进度View

这里采用DST_OUT模式,DST是覆盖在ImageView上的半透明遮罩,SRC是动态绘制的白色进度条,取两者相交的区域并显示DST的像素,就能实现视频中的效果。核心原理是使用PorterDuffXfermode + Path来绘制进度,并实现圆角。Android笔记(三十)效果演示。

2024-03-28 17:49:19 441 1

原创 Android笔记(二十九):用Python一键生成App多语言

项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内。

2023-09-11 22:55:13 482 1

原创 Android笔记(二十八):在雷电模拟器安卓7.0+上使用Charles抓包详细教程

由于手头没有合适的真机,所有经常使用雷神模拟器来跑项目,模拟器也需要能够抓包看看接口返回的数据,以便自测调试。本文记录了如何在雷电模拟器安卓7.0+上使用Charles抓包,其他模拟器没试过。

2023-09-06 17:50:24 12076 19

原创 Android笔记(二十七):自定义Dialog实现居中Toast

记录实现符合项目需求的Toast弹窗。

2023-08-23 20:59:56 931

原创 Android笔记(二十六):SDK接口防反射设计

利用Exception的接口返回方法调用栈,判断是否存在。的调用,是则为反射调用,直接抛异常中断方法继续执行。反射调用test接口会抛异常,正常调用则成功执行。

2023-03-07 22:00:22 232

原创 Android笔记(二十五):两种sdk热更插件资源加载方案

在研究sdk插件化热更新方式的过程中总结出了两套插件资源加载方案,在此记录下。

2023-02-26 16:53:06 1347

原创 Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab

由于Google play的政策,提审aab的时候需要适配android12,适配android12最大的工作就是在AndroidManifesst.xml文件中声明的四大组件,都要显式声明exported字段。如果手动添加,在遇到第三方sdk时就会比较麻烦,所以只能使用gradle脚本自动添加,而网上给的gradle脚本例子都是只对apk生效,所以自己手动改造一下,以支持aab。遍历AndroidManifest.xml文件的每一个节点,识别到activity,receiver,service节点时,如果

2022-12-16 11:03:01 1053

原创 Android笔记(二十三):以插件化APK方式启动带WebView的Activity

本文记录插件化学习过程中,如何以插件化apk方式启动带WebView的Activity,分三大步骤完成。

2022-11-28 01:18:09 802

原创 Android笔记(九):获取屏幕高度,状态栏高度,虚拟导航栏高度

本文通过画图的方式去理解如何获取屏幕高度,状态栏高度,虚拟导航栏高​​。

2022-11-18 17:14:55 2828

原创 Android笔记(二十二):Gradle自定义插件读取assets目录及修改AndroidManifest.xml

由于项目需求,需要在打出apk包前读取assets目录下的文件,以及修改打出的apk包的AndroidManifest.xml文件的权限。

2022-09-25 11:31:40 1936

原创 Android笔记(二十一):Gradle小技巧——自定义Task生成dex文件/修改assets目录下的文件

项目想用dex动态加载,而androidstudio java模块构建完成后会生成jar,需要手动转成dex文件,比较麻烦,因此可以自定义gradle task用于生成dex文件。

2022-09-23 17:29:58 2092

原创 Android笔记(二十):写一个图片文字识别SDK给自己用

市面上文字识别大多需要开通会员才能使用,所以决定自己封装一个sdk出来,供后面开发扫描类app提供便捷工具

2022-06-18 15:57:22 1042 1

原创 Android笔记(十九):WebView浏览器多标签页(多窗口)功能新的实现

背景之前写过的文章——WebView+Fragment+ViewPager构建浏览器多标签页虽然实现了多标签页的功能,但是有个弊端就是随着创建的标签页数量增加,viewpager的滑动会越来越卡。之前一直没有时间优化,最近尝试着优化了一下,对Dainty浏览器的多标签页功能抽取出来,进行改造。...

2022-05-04 00:12:35 3808 1

原创 React Native笔记(三):解决在RN中使用Android原生WebView时输入框被遮挡问题

如题,在解决该问题前,上网搜了一下资料,找到了下面这个方案:Android webView输入框软键盘遮挡问题-终极解决方案(不好使你打我)但是,这在纯原生上可行,在rn上却没有效果。主要原因是rn有自己的一套布局测量绘制机制,导致在原生调用requestLayout()没有响应,经过几次实践,得出下面针对rn的解决办法。重写WebView的requestLayout方法,rn绘制时主动通知原生重新布局WebViewpublic class CusWebView extends WebView{

2022-04-27 10:32:21 1058

原创 React Native笔记(二):ViewPager2嵌套rn组件滑动冲突解决思路

背景由于业务需求,要求使用原生的ViewPager2在rn中实现tab侧滑功能,而tab页面中会有水平滑动的FlatList列表,这样就会造成滑动冲突的情况。解决思路:因为ViewPager2被声明为final的,所以只能从FlatList去动手,于是本文基于谷歌官方的NestedScrollableHost进行改造。步骤改造NestedScrollableHost给rn使用用isFromRN字段标识该组件是由rn创建而来的ReactFindViewUtil.findView可以找到当前根view

2022-03-26 16:20:02 1989

原创 React Native笔记(一):封装android原生列表组件给rn使用

背景react native官方提供的FlatList与原生RecyclerView相比:仅创建可见区域的视图,两者是一致的。FlatList没有cell recycling,重用item view。FlatList中将不可见的视图从内存中移除,但同时也会导致大量的视图重新创建以及垃圾回收。如果不断的创建视图,在列表滚动的过程中,内存占用量会不断增加。而原生的recyclerview因为能复用视图,所以在快速滑动的时候性能上影响不大。并且rn又支持封装原生组件给rn使用,于是产生了封装recyc

2022-03-21 09:56:15 3755 4

原创 Android笔记(十八):ViewPager2嵌套WebView手势冲突问题

正常情况下,viewpage2嵌套webview会导致网页内容无法滑动,解决该问题的核心在与利用requestDisallowInterceptTouchEvent与onOverScrolled这两个方法重写WebView如下:public class NestedWebView extends WebView{ public NestedWebView(Context context) { super(context); } public NestedWeb

2022-03-20 19:00:01 1587

原创 Android 实测WebView获取页面的post请求参数(form,ajax)

背景由于项目需求要获取某些网页的请求参数信息,get请求的参数拼接在url中,所以可以直接拦截url获得,但是post请求的参数信息存放在body里面,android没有提供方法直接获取,而该网页是其他第三方提供的,不方便修改网页代码来传递参数给android原生这边,所以可以通过js注入的方式来获取。关键步骤js代码核心js代码下载jscore从文件中读取js代码为字符串,便于后面给webview加载public class IOUtils { public static byte[]

2021-11-27 14:20:18 4895 2

原创 Android NDK实践——开发AES加/解密工具包

背景将AES加密算法的秘钥放java源码层容易被反编译获取在C++层封装AES加/解密过程供java层调用目前支持AES加密模式CBC,填充方式:zeropadding,数据块128位,输出base64/hex流程新建Native C++工程目的是为了获取as自动生成的CMakeLists.txt,不用我们手动生成新建一个Library模块mylibrary将app模块的main目录下的cpp文件夹拷贝到mylibrary模块的main目录下修改mylibrary模块的build.

2021-08-02 12:00:08 1330

原创 自建Tomcat完成Android App Links实践

Android App Links实践搭建Tomcat服务器(支持SSL)申请外网域名为域名申请阿里SSL证书修改conf/server.xml修改conf/web.xml按照androidstudio AppLinks Assist指引配置其中一步将assetlinks.json文件放进webapps/.well-known文件夹下真机验证搭建Tomcat服务器(支持SSL)申请外网域名使用nat123获得(外网映射tomcat本地网)为域名申请阿里SSL证书申请流程此处域名验证方式使用文件验

2021-07-25 14:43:13 446 4

原创 Android笔记(十七):Gradle配置多渠道资源签名打包

在app build.gradle下编辑1.配置不同渠道打包签名:android { ... signingConfigs { debug { keyAlias '' keyPassword '' storeFile file('xxx.keystore') storePassword 'android' } release { .

2020-10-09 15:59:43 736

原创 Android笔记(十六):Gradle脚本动态修改AndroidManifest.xml的MainActivity

在主模块build.gradle添加如下代码即可修改AndroidManifest.xml的MainActivity原理:利用Groovy XmlSlurper来改写xml文件import groovy.xml.XmlUtilthis.afterEvaluate { def manifestFile = "${projectDir}/src/main/AndroidManifest.xml def xml = file(manifestFile) def manifes

2020-10-09 14:13:37 2260

原创 Android笔记(十五):仿UC底部弹出菜单

效果图:v1.0.0是采用PopupWindow+Animation+阴影子Window来实现;v1.1.0是采用伸缩RelativeLayout+Animation+设置背景色来实现具体见:源码

2018-09-29 09:44:22 524

原创 Android笔记(十四):分析SingleTask和SingleInstance启动模式

ActivityA启动ActivityB(SingleTask模式):1.ActivityA与ActivityB在同一个应用• 任务栈中存在ActivityB,则不会创建新的,直接使用它(调用onNewIntent),并将它之上的Activity出栈•任务栈中不存在ActivityB,则在栈顶新建一个2.ActivityA在应用A,ActivityB在应用B• 应用B处于......

2018-06-09 12:59:39 3827

原创 Android笔记(十三):总结Activity更多生命周期方法回调顺序

官网图补充:回调方法顺序:1.App正常启动:onCreate->onStart->onResume->onWindowFoucusChanged2.启动后屏幕熄灭/Home返回App:onPause->onSaveInstanceState->onStop->onWindowFocusChanged3.屏幕重新亮起:onRestart->onStart-...

2018-06-09 10:01:26 897

原创 Android笔记(十二):API 19以上WebView缓存目录

Android4.4+当在项目中使用了WebView时,会在/data/data/package_name/目录下生成一个app_webview文件夹,而4.4以下则没有页面缓存:加载一个网页时的html,js,css等页面或者资源文件,这些缓存资源是由于webview的行为而产生,开发者只能通过配置http响应头影响浏览器的行为才能间接地影响到这些缓存数据。Android4.4以上存放在Cach...

2018-04-17 16:09:27 5908

原创 Android笔记(十一):MultiSelectListPreference设置监听的返回值

findPreference("MultiSelectListPreference's key").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Prefer...

2018-04-17 13:57:53 1280

原创 Android笔记(十):判断虚拟软键盘是否弹出

private boolean isSoftInputMethodShowing() { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableH...

2018-03-06 13:04:45 410

原创 Android笔记(九):获取屏幕高度,状态栏高度,虚拟导航栏高度

通过getWindow().getDecorView().getHeight()或者DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; 可以获取屏幕像素高...

2018-03-06 13:00:22 2689

Android笔记(三十三):封装设备性能级别判断工具-低端机还是高端机博客配套源码

博客文章完整源码Android笔记(三十三):封装设备性能级别判断工具-低端机还是高端机 包含获取cpu频率,获取内存值,获取gpu名字等方法 博客链接:https://blog.csdn.net/weixin_40855673/article/details/143491031 代码经过真机调试,如有bug或者更好的建议,欢迎在博客下方评论留言哦

2024-11-07

xls-convert-strings.py

博客文章用到的脚本——Android笔记(二十九):利用python自动生成多语言 博客链接:https://blog.csdn.net/weixin_40855673/article/details/132819008 代码经过真机调试,如有bug或者更好的建议,欢迎在博客下方评论留言哦

2023-09-11

内存填充工具fill-ram-memory

用于模拟应用在低内存环境下的运行情况

2024-03-20

ProxyDroid.apk

Android笔记(二十八):在雷电模拟器安卓7.0+上使用Charles抓包详细教程文章内用到的apk

2023-09-06

完整gradle脚本-Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab

以上脚本给出了文章提到的代码片段如何引入项目中,并且是经过反复实测的,打包aab/apk时能自动添加exported字段,如果遇到任何问题,请邮件联系[email protected],有更好的解决方法欢迎一起交流

2022-12-16

图片识别sdk aar接入

图片识别sdk aar接入

2022-06-18

本人亲测~拦截post请求关键js代码

拦截post请求关键js代码 文章源地址: https://blog.csdn.net/weixin_40855673/article/details/121575150?spm=1001.2014.3001.5501

2021-11-27

aes-library.rar

AES加解密工具C++库,含有base64编码解码函数

2021-08-02

空空如也

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

TA关注的人

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