- 博客(26)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 Android TV 切换日夜模式后,焦点丢失问题 focusableInTouchMode属性
切换日夜模式后焦点丢失开始时认为焦点丢失的原因是view在变更属性重绘时,没有绘制完成就设置焦点,导致焦点的丢失,进行了一系列恢复焦点的操作,如记录丢失焦点的view然后延时重新requestFocus、或者监听view绘制完成后再延时等等,都没有作用,开始认为是延迟时间不够的原因,后面发现延迟多久requestFocus都不生效,所以可以断定不是重绘导致的问题。设置这个属性之后,点击屏幕,被点击的view会获取焦点,不会触发焦点丢失,但是也带来一个问题,就是第一次点击是触发获取焦点
2024-03-03 08:23:20
387
原创 Android中毛玻璃效果的实践
设置为 true 时,窗口将是半透明的,窗口后面的内容也将是可见的。设置为 false 时,窗口将是不透明的,窗口后面的内容将不可见。通过以上尝试,可以判断出activity对接组件dialog毛玻璃不生效,跟使用的主题有较大关系,但是首页被透明显示的问题未查到根本原因,只知道与。可以实现模糊度效果,但是存在致命问题:Activity弹出后,MainActivity直接被透明了,看到了桌面。可是避免方案1的问题,但是模糊度没办法做到和组件一样,只能通过调节模糊比例,做到近似效果。:Activity利用。
2024-03-03 08:21:41
1205
原创 ExoPlayer包体积优化
应启用应用程序的发布版本的代码和资源缩减。例如,对于播放 DASH 内容的应用程序,通过启用代码缩减,ExoPlayer 对 APK 大小的贡献可以减少约 40%。依赖于 ExoPlayer 库中提供的所有提取器实现,因此代码缩减不会移除其中的任何提取器。如果你知道你的应用程序只需要播放少量容器格式,或者根本不播放渐进式媒体,可以自定义指定。依赖于 ExoPlayer 库中提供的所有渲染器实现,因此代码缩减不会移除其中的任何渲染器。如果你知道你的应用程序只需要渲染器的子集,可以自定义指定。
2023-12-30 10:08:07
485
原创 recyclerview优化:DiffUtil使用过程中遇到的问题总结-kotlin中==未比较equals的问题分析
而我项目中自定义的java bean没有实现equals方法,这就导致在判断调用的时候,调用的是any默认的equals方法,仅会对引用进行比较,而不会对字段进行逐一的比较。问题2:使用==比较。其实这个问题的原因是项目中,虽然在调用处使用的是kotlin,但是bean文件是用Java创建的,这其实就涉及到一个java和kotlin混合使用的问题。这个问题就比较奇怪了,根据对kotlin的理解,==比较就是调用equals进行比较,并且写过测试代码,当字段变化时,两个对象进行比较返回的是false。
2023-09-24 09:58:38
236
原创 TV焦点实战总结
解决办法是改用notifyItemRangeChanged(0,5)方法刷新所有数据,0代表position(recyclerview的开始位置),5代表刷新后item的数量。② 设置不可获取焦点 : 凡是 不需要获取焦点的组件 , 统一添加 android:focusable=“false” 属性;① 设置可获取焦点 : 给 需要获取焦点的组件 , 统一添加 android:focusable=“true” 属性;android:descendantFocusability 属性;
2023-09-24 09:22:17
186
原创 sw适配方案,运用ScreenMatch插件
将基础文件复制一份到match生成的screenMatch_example_dimens文件中。代入公式,计算出 dp = 2160 / (160 / 160) = 2160 dp。在screenMatch.properties指定match_dp=2160。dp的计算公式是:dp = px / (dpi / 160)。根据设计稿的1080,可以计算出是两倍关系。其它分辨率的文件会基于这个文件内容来生成。设计稿是基于1960*1080的,则base_dp指定为1080。
2023-09-24 09:17:55
286
2
原创 Android 修改代码后不生效问题的终极方案
但是最终遇到一个咋配置都不生效的项目,这里主要就是当你咋配studio都不生效,gradle咋改都不好使的时候,提供一些节约时间的方法。最后,到底为啥改了代码重新run会不生效,我没找到根本原因,怀疑是gradle配置的问题,会不会与多module的sourcesets有关系,尝试去配置了sourcesets,但是没生效,希望找到原因的同学一起交流。前言: 最近遇到几个项目,都出现了代码修改后,直接点studio上的run,跑起来后代码没生效,如果重新clean。这个方案比较麻烦,要操作步骤比较多。
2023-09-07 19:01:33
2220
1
原创 Kotlin无法调用到Java中定义的interface类的问题“Interface is inaccessible declaration of ‘..‘ appears in /data/app”
Java中默认的方法和变量默认是protected的修饰,但是kotlin中却无法调用protected修饰的方法。所以只需要在interface前面加上public的修饰符就好了。
2023-06-07 13:40:17
223
原创 Fragment的容器-FragmentContainerView;android.widget.FrameLayout{c69d6ea V.E...... ........ 0,0-2560,121
另外一个好处,使用FragmentContainerView,可以使得管理Fragment变得更加方便,避免常见问题,如在屏幕旋转期间保存和恢复Fragment状态。我们可以点进FragmentContainerView的源码,发现它也是继承于FrameLayout的。添加的动画,可以保证退出动画的Fragment在 FragmentContainerView 的所有其他Fragment之前绘制,在使用Fragment的时候,一般会采用framelayout占位的方式,然后使用replace替换。
2023-06-02 10:12:55
592
翻译 Robolectric——Shadows 官网翻译
Robolectric 通过创建一个包含真实Android 框架代码的运行时环境来进行工作。 这意味着,当你的测试或被测试代码调用到Android框架时,你会获得更真实的体验,因为这跟在实际设备上执行的大部分代码都是相同的。然而还是有一些限制:Native code(源代码) - Android源代码不能在你的开发机器上执行。2.Out of process calls(进程外调用) - 你的开发机器上没有运行Android系统服务。3.不足的测试Api - Android几乎没有适合测试的ap
2021-03-04 15:08:59
597
2
原创 Junit 的 @RunWith():Runner,即Junit的运行器
什么是Runner,@RunWith()到底有什么用?Runner是Junit的运行器,即运行测试用例的工具。我们可以在测试类之上,使用@RunWith()注解为这个类指定一个特定的Runner。当我们没有指定@RunWith()的时候,会自动使用Junit的默认Runner——BlockJunit4ClassRunner。常用的Runner:Suite:测试套件 ;Category:按种类区分的套件;Parameterized:参数化测试; Theories:排列组合。利用 Runner,可以
2021-02-22 19:15:46
4406
原创 DialogFragment——解决PopupWindow中的输入框无法复制粘贴的问题;Android中的两种弹窗PopupWindow和Dialog的区别。
本文旨在介绍Android中的两种弹窗PopupWindow和Dialog的区别。其实之前各类弹窗,都是使用PopupWindow来实现的。因为PopupWindow能实现这些需求,虽然有的时候有些麻烦,比如前面的文章有写到PopupWindow去实现蒙版遮罩的问题。它本身是没有蒙版提供的。我们项目中使用各种方法去给它增加遮盖层。如今看来确实是有些愚蠢的。我不介意说出以前存在的问题,因为发现问题并改进问题才是学习的过程。当然也希望看到这篇文章的小伙伴有自己的想法可以多多沟通,如果也有跟过去的我一样盲目的
2021-02-05 18:37:52
586
原创 ConstraintLayout使用中遇到的问题:同一行内的两个Textview,第二个被挤出屏幕的解决方案
遇到的一个问题:同一行的两个Textview,要实现两个View连着,前一个view的内容长度不确定,过长的时候会导致第二个view被挤出屏幕外,使用LinearLayout也会出现这种情况。这里提供一个解决方案:借助于辅助线,和app:layout_constrainedHeight表示是否约束height,相应的也有app:layout_constrainedWidth*app:layout_constraintVertical_bias表示作用于链头第一个子控件,通过设置值0~1控
2021-01-27 16:19:05
2886
原创 一个实现带灰色蒙版从底部弹出的PopupWindow基类封装(解决蒙版覆盖虚拟按键问题)
主要解决的问题:1.项目中过多冗余的PopupWindow初始化2.每个页面单独对灰色蒙版进行处理,并且效果并不是特别好。3.使用WindowManager设置透明度,PopupWindow因为有延时动画,快速点击的时候,会出现一定异常情况。4.使用WindowManager的透明度设置灰色蒙版,存在当底部展示虚拟按键的时候,灰色蒙版会覆盖到虚拟按键上。解决思路:1.在基类中初始化一个PopupWindow,并对其进行一些常规的设置(通常大部分页面的设置都差不多,取最常用的配置.
2020-12-10 18:37:55
421
1
原创 Appium学习笔记——Appium初探,下载与安装以及初步的录制尝试
一.Appium简介Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。可以跨平台同时支持Android、iOS 支持多种语言,java、python、php、Ruby等等可支持屏幕录制生成脚本。二.Appium的下载与安装Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。因已不再维护,我这里直接使用Appium-Desk...
2020-12-02 20:41:18
302
原创 Flutter系列(基于Android开发)——开发环境配置——2020-11-27
**基于Android****一、下载Flutter SDK**使用git命令行下载(没装git的可以去下载一下啦,网上各种下载zip的方式尝试了半天,最后才知道解压有隐藏文件解压不出来的情况,设置的时候一直提示sdk不完整,所以直接放弃这条路了,使用git命令行完美解决)打开git bash,执行如下命令:常规:git clone https://github.com/flutter/flutter.git镜像加速:(下载太慢尝试这个)(我用的是这个)git clone --dept
2020-11-27 16:04:53
834
原创 String.format与手机设置的语言环境的关系导致语言转换系统无法识别闪退问题
String.format与手机设置的语言环境的关系导致语言转换系统无法识别闪退问题
2017-06-13 10:41:43
1051
原创 installation failed with message install_canceled_by_user应用安装失败
小米5,测试时,应用安装失败,提示installation failed with message install_canceled_by_user。解决方法: 在开发者模式下(如何进入开发者模式,关于手机 —— 连续点击MIUI版本 选项,即可进入开发者模式),设置 —— 更多设置 —— 开发者选项 —— USB安装,开启,即可跑应用,注意在安装的过程中会提示是否安装,要手动选择安装。
2016-11-19 15:06:32
9755
6
原创 android如何查看手机中的db文件,查看sqlite数据库的表结构
我们的app里面用到sqlite数据库的时候, 会生成一个db文件,保存在我们手机中。有的时候,在调试数据库,很想看一下里面的表结构是否正确,这个时候就十分苦恼,因为这个db文件不能够直接拿出来,我们知道,在DDMS里面有一个FileExplorer,它里面保存着手机中的各个文件夹,但是尝试打开里面的文件夹的时候,却发现怎么点都没有东西,是真的没有吗?其实是我们没有获取到访问这个文件夹的权限。下面我
2016-08-30 14:14:20
52502
3
原创 Android 属性动画实现抛物线动画
此前多次学习过安卓动画,知道有三种动画,知道三种动画的特性,但是一直没有实践过,看了没有多久,就忘记了,而且也不会用,这次通过实现“抛物线”动画,对安卓的动画有了一次较为明确的理解。首先,安卓的三种动画有哪三种呢? 1、Tween Animation 渐变(补间)动画 2、Animation-list 逐帧动画 3、Property Animation——Animato
2016-06-29 14:44:27
8204
翻译 使用Android Studio的Live Templates——实现用少量的代码写出更多的代码
原文地址如果你已经写了大量的Android代码,你可能至少有一次的犯了这个错误: Toast.makeText(MainActivity.this, "This will not be displayed");如果我告诉你,这里有一种方法能够保证你可以避免这个错误,并且只需要很少的键盘输入。 我说的这个方法是一种什么魔法吗? 答案是Live Templates!如果你是一个经验丰富的Int
2016-03-30 13:01:42
1693
1
原创 android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
首先我要区分清楚沉浸式状态栏与变色状态栏。沉浸式状态栏指的是,状态栏隐藏,在手指做了相关操作后,状态栏显示出来,例如视频播放器,在播放视频时是隐藏状态栏的,但是点击屏幕的时候,状态栏会显示出来,再例如文本阅读器,在阅读的时候是全屏的,然后从屏幕上方下滑或者下方上划,虚拟键和状态栏出现了,但却是直接覆盖在程序文字上的,这是所谓的沉浸式状态栏。 那么大家平时所说的状态栏与导航栏颜色相同,或
2016-03-28 14:09:24
36562
12
原创 非常简洁的自定义dialog实现方式(带源码)
/** * 自定义dialog * @author Administrator * */public class CustomDialog{ private TextView title; private TextView detial; private Button cancel; private Button ensure; private Dialog mDialog;
2014-05-08 14:13:09
746
原创 自定义spinner实现修改字体大小、颜色等
spinner默认显示的字体颜色为纯黑色,在一些情况下,我们想要改变这种颜色,但是却发现在spinner的属性里面并没有setTextColor类似这样的属性,也就是说我们无法简单的直接设置其内部字体的颜色。通过查找资料,我们可以通过使用adapter的方式来实现我们想要的效果。效果如图:代码如下:1、写一个单独的布局文件personal_spinner.xml,里面只包含
2014-01-21 11:27:15
7214
MyApplication2.zip
2020-12-10
Appium-windows-1.19.1-beta.0.exe
2020-12-02
Appium-windows-1.15.1.exe下载
2020-12-02
抛物线属性动画缩放属性动画可自定义起点终点
2016-06-29
android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
2016-03-28
自定义控件---实现天气折线图效果
2014-06-03
spinner实现自定义修改字体颜色大小
2014-01-21
android做json解析,从服务器获取资源
2013-10-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人