
组件
文章平均质量分 74
锐湃
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
画中画窗口的“最大化”和“关闭”按钮点击鉴别
本文介绍了如何区分Android画中画模式下用户点击"最大化"和"关闭"按钮的方法。虽然系统未提供直接区分方式,但通过观察发现,两种操作会触发不同生命周期状态:点击"关闭"时页面处于CREATED状态,而点击"最大化"则处于STARTED状态。作者验证了通过重写onPictureInPictureModeChanged方法,结合生命周期状态判断,可以准确区分用户意图。该方法已在StackOverflow上被提出并验证有效。转载 2025-07-31 11:53:38 · 18 阅读 · 0 评论 -
pip画中画 android:excludeFromRecents=“true“
Android画中画模式与excludeFromRecents属性配合使用指南 摘要:在Android开发中,当Activity开启画中画模式(PiP)时,通过设置android:excludeFromRecents="true"可防止其出现在最近任务列表。该组合适用于视频播放器等敏感内容场景,但需注意:1)可能导致任务栈管理混乱;2)需正确处理PiP生命周期的数据恢复;3)Android12+需显式声明supportsPictureInPicture。开发时应根据业务需求权衡使用,并确转载 2025-07-18 18:30:30 · 39 阅读 · 0 评论 -
PIP画中画生命周期
Android画中画(PiP)模式的生命周期详解:当Activity进入PiP模式时,会依次触发onUserLeaveHint()、onPause()和onStop()方法;退出时则调用onStart()和onResume()。关键方法onPictureInPictureModeChanged()用于处理UI状态切换,开发者需在此控制视频播放和UI元素的显示隐藏。为保持视频播放,应在onPause()中判断是否进入PiP模式来决定是否暂停。此外,需在manifest中声明configChanges以正确处理转载 2025-07-17 18:25:03 · 51 阅读 · 0 评论 -
画中画(PIP)模式使用
本文介绍了Android 8.0推出的画中画(PIP)模式实现方法。通过在manifest配置activity支持PIP,使用PictureInPictureParams.Builder设置参数,包括宽高比、操作按钮等。文章详细讲解了如何判断设备是否支持PIP、进入PIP模式的方法、监听模式状态变化,并针对Android 12新增特性进行适配。相比传统悬浮窗实现方式,PIP模式更加简便,且提供了更流畅的用户体验。最后给出了完整的Kotlin实现代码示例,展示了从正常模式切换到画中画模式的全过程。转载 2025-07-17 17:09:34 · 45 阅读 · 0 评论 -
使用画中画功能添加视频PIP
随着移动设备的普及,用户对多任务处理的需求不断增加。画中画(Picture-in-Picture, PiP)模式作为一种创新的界面设计,允许用户在进行其他操作的同时,继续观看视频或进行音频通话。这种功能不仅提升了用户体验,还为应用程序提供了更大的灵活性和便利性。转载 2025-07-17 17:02:33 · 30 阅读 · 0 评论 -
onUserLeaveHint()和onUserInteraction() home键
onUserLeaveHint()和onUserInteraction()转载 2025-07-17 16:37:35 · 15 阅读 · 0 评论 -
画中画 (PIP) 简介
Android画中画(PiP)模式允许用户通过小窗口观看视频同时操作其他应用。开发者需注册activity并处理界面切换逻辑,使用OnPictureInPictureModeChangedProvider检测PiP状态,通过rememberIsInPipMode()控制界面元素显示(如视频播放时隐藏文本)。代码示例展示了如何在Compose中根据PiP状态动态调整UI布局。转载 2025-07-17 16:34:50 · 56 阅读 · 0 评论 -
利用Activity实现Dialog对话框
本文介绍了利用Activity替代Dialog的实现方案。通过固定尺寸布局(300dp×400dp)配合背景图实现对话框效果,在manifest中设置透明Dialog主题样式。关键点包括:1)布局使用预设背景图实现特殊效果;2)Activity继承自基础Activity类;3)通过windowNoTitle和透明背景配置实现对话框外观。该方法解决了Dialog内存泄漏问题,同时保留了灵活布局优势,适用于升级提示等交互场景。需要注意的是,此方案需美术配合提供背景资源,且主题必须继承Dialog样式。转载 2025-06-14 11:52:35 · 49 阅读 · 0 评论 -
开发 实现一个activity变成dialog对话框
本文介绍了将Activity实现为对话框的方法及其优势。利用Activity模式实现对话框可以扩展功能,如数据传递和生命周期管理,特别适用于头像设置等复用场景。具体步骤包括:1)在styles.xml定义对话框主题样式;2)在AndroidManifest.xml配置主题;3)创建Activity并设计布局;4)在代码中隐藏标题栏。通过这种方式可以实现更灵活的功能调用,文章还提供了完整的代码示例和预览图。转载 2025-06-14 11:48:49 · 60 阅读 · 0 评论 -
Dialog主题Activity实现自定义对话框效果
本文介绍了如何将Activity设置为Dialog主题实现对话框效果。通过修改AndroidManifest.xml中的theme属性为Theme.Dialog,并去除标题栏(requestWindowFeature),可以创建对话框式Activity。文章还展示了自定义XML布局的方法,包括添加背景图片和按钮。针对圆角对话框需求,提出了自定义style解决方案,通过设置透明背景、浮动窗口等属性实现更好的视觉效果。最后强调这种Dialog形式的Activity仍保留完整Activity功能,可以正常操作控件转载 2025-06-14 11:43:22 · 36 阅读 · 0 评论 -
Bottom Sheet 与内部 Fragment 的滚动冲突问题
解决BottomSheet与内部Fragment的滚动冲突,可通过协调布局行为实现。使用CoordinatorLayout和BottomSheetBehavior管理布局结构,结合NestedScrollView或NestedScrollingChild接口处理滚动优先级。当BottomSheet全屏时提升Fragment滚动优先级,Fragment滚动到顶端后恢复BottomSheet滚动。Jetpack Compose可使用Modifier.nestedScroll实现类似效果。该方法通过监听Botto转载 2025-06-12 20:55:34 · 55 阅读 · 0 评论 -
【日常小问题】解决BottomSheetDialogFragment中多个fragment滑动冲突
文章分析了BottomSheetDialogFragment嵌套多个Fragment时出现的滑动冲突问题。通过源码分析发现,BottomSheetBehavior默认只支持单层可滑动控件。解决方案包括:1)修改findScrollingChild方法支持ViewPager情况;2)在Fragment切换时通过回调接口更新可滑动控件引用。核心思路是动态更新mNestedScrollingChildRef指向当前活跃的可滑动控件(如RecyclerView),从而解决了内外层滑动冲突问题。该方法通过继承修改Bo转载 2025-06-12 20:44:21 · 75 阅读 · 0 评论 -
LiveEventBus项目深度解析:消息总线的配置与使用指南
在现代Android应用开发中,组件间通信是一个常见需求。LiveEventBus作为一款基于LiveData实现的消息总线框架,提供了高效、安全的组件通信解决方案。本文将深入解析LiveEventBus的核心配置和使用方法,帮助开发者更好地理解和应用这一工具。转载 2025-06-10 18:24:13 · 86 阅读 · 0 评论 -
DialogFragment的宽度占据整个屏幕
DialogFragment是Android开发中用于创建全屏对话框的组件,相比AlertDialog具有更灵活的屏幕适配能力。开发者可以通过两种方式实现全屏宽度:1)在onCreateView方法中动态设置WindowManager.LayoutParams为MATCH_PARENT;2)通过自定义style样式,在XML中配置windowMinWidthMajor/Minor属性为100%。这两种方法都能让对话框占据整个屏幕宽度,提供更好的用户体验,尤其适合需要大空间展示内容的场景。转载 2025-06-04 13:51:52 · 94 阅读 · 0 评论 -
实现一个屏幕宽度的dialogfragment
实现一个屏幕宽度的dialogfragment原创 2025-06-04 13:11:52 · 123 阅读 · 0 评论 -
如何截取Activity或者Fragment的内容
被启用,然后创建一个与控件大小相同的Bitmap,并使用Canvas将控件的内容绘制到这个Bitmap上。如果你不想包含状态栏,可以通过计算状态栏的高度来调整截取的区域。首先,你需要创建一个足够大的Bitmap来容纳整个RecyclerView的内容,以及一个Canvas对象来绘制内容。如果RecyclerView的内容超过了一个屏幕的高度,你需要将每次绘制的Bitmap合并到最初的大Bitmap中。方法会遍历RecyclerView的所有Item,计算总高度,并逐屏绘制内容到一个大的Bitmap中。转载 2024-11-19 20:34:14 · 140 阅读 · 0 评论 -
Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘ which is a supertype of
【代码】Cannot access 'androidx.activity.FullyDrawnReporterOwner' which is a supertype of。转载 2024-11-01 14:25:38 · 372 阅读 · 0 评论 -
Jetpack Compose Material 实现自适应布局稳定版本已发布
自适应布局是指应用程序 UI 能够根据设备的屏幕尺寸、方向和窗口状态,自动调整其显示内容和布局方式。对于手机和大屏设备(如平板和桌面设备),用户界面应具备灵活性,以确保在不同窗口大小下的用户体验一致性。Jetpack Compose 的 Material 自适应布局 API 提供了多个预定义的布局和工具,帮助开发者轻松应对这一挑战。尽管默认的自适应行为足够满足大部分场景的需求,但有时我们希望进一步自定义。例如,通过自定义,你可以手动处理设备的返回操作,甚至在不同屏幕大小时对返回行为做不同处理。) {转载 2024-10-30 17:49:51 · 445 阅读 · 0 评论 -
Jetpack WindowManager 1.1 稳定版
系统会在屏幕上并排或上下显示托管应用的 Activity 和其他应用的嵌入 Activity,就像在单一应用 Activity 嵌入中一样。托管应用会按照实现单一应用 Activity 嵌入的相同方式实现跨应用 Activity 嵌入,但出于安全原因,被嵌入的应用必须同意并选择加入。如果您想优化您的应用在不同设备类型上的用户体验,Jetpack WindowManager 便是您应该学习的最重要的库之一。自 Android 13 (API 级别 33) 起,应用可以嵌入来自其他应用的 Activity。转载 2024-10-30 17:47:57 · 88 阅读 · 0 评论 -
[Android翻译]解除对WindowManager的束缚
发布时间:2021年8月20日 - 6分钟阅读为可折叠设备和大屏幕设备优化应用程序Android的屏幕尺寸正在迅速变化,随着平板电脑和可折叠设备的不断普及,了解你的应用程序的窗口尺寸和状态对于开发一个响应式的UI至关重要。现在处于测试阶段,它是一个库和API,提供类似于Android框架的功能,包括对响应式UI的支持、检测屏幕变化的回调适配器以及窗口测试API。但Jetpack WindowManager还提供了对新型设备的支持,如可折叠设备和Chrome OS等窗口环境。转载 2024-10-30 17:39:14 · 64 阅读 · 0 评论 -
Android 第5种启动模式:singleInstancePerTask
允许一个 Activity 作为任务栈的根 Activity 来运行,并且它只会在这个任务栈中有一个实例。不过,与singleTask不同的是,可以在不同的任务栈中创建多个实例。如果启动该 Activity 时设置了或标志,那么每次启动时都会创建新的任务栈。在 Android SDK 中,通过此定义可以看出,可以避免在同一个任务栈中创建多个实例,但允许在不同的任务栈中有多个实例。而singleTask则会限制该 Activity 只存在于一个任务栈中。转载 2024-10-22 15:02:13 · 353 阅读 · 0 评论 -
Jetpack中Lifecycle使用生命周期感知型组件处理生命周期
在上述示例中,我们创建了一个LifecycleObserver对象,并在其内部使用@OnLifecycleEvent注解来监听ON_RESUME和ON_PAUSE事件,并在对应的方法中执行相应的逻辑。然后,在你的Activity或Fragment中创建一个LifecycleObserver对象,并使用@OnLifecycleEvent注解来实现相应的生命周期方法。你可以根据需要在LifecycleObserver对象中监听其他生命周期事件,并在对应的方法中处理相应的逻辑。转载 2024-10-11 16:32:50 · 132 阅读 · 0 评论 -
值得一看的Android广播分析好文
广播会发送到广播队列中不同集合。其中广播队列有三种类型,分别对应优先级从高到底:前台、后台、长广播队列类型。而广播又分三种:黏性广播、无序广播、有序广播。无序广播和有序广播的处理主要要发送广播的时候,而黏性广播则在广播接收者注册时候被处理。一个应用程序允许注册最大的广播接收者是1000个。广播之间的传递也要经历各种权限检查,所以广播不适合在应用间用于频繁的交互。值得一看的Android广播分析好文作者:新小梦链接:https://juejin.cn/post/7322156751818522661。转载 2024-08-09 10:19:51 · 96 阅读 · 0 评论 -
在代码中发送按键事件
在做一个项目中,遇到下面这样一个问题。项目主界面是TabActivity,每个子tab 都是一个acitivity。有个子tab中,点击注销用户,要退回到项目主界面默认的tab,相当于按返回键。解决办法如下:在这个子tab中写下面方法。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.youkuaiyun.com/u010213003/article/details/8979828/转载 2024-07-30 19:16:30 · 89 阅读 · 0 评论 -
movetasktoback的作用
如果设置为 `false`,无论 Activity 是否是任务的根,都会执行移至后台的操作。- 模拟主屏幕操作: 有时候,开发者希望提供一种方式,让用户能够退出应用,但又不完全关闭它,使得应用可以快速重启。这段代码通常会覆盖 `Activity` 中的 `onBackPressed()` 方法,以改变 Back 按钮的默认行为,使得应用退到后台而不是立即退出。- 这个方法不会影响 Activity 的生命周期,Activity 依然会按照正常流程调用 `onPause()`、`onStop()` 方法等。转载 2024-07-12 16:13:59 · 530 阅读 · 0 评论 -
退到桌面 moveTaskToBack
在上述代码中,我们首先在布局文件中添加了一个按钮,用于触发“退到桌面”的操作。然后在Activity中找到这个按钮,并设置了点击事件,在点击事件中调用了moveTaskToBack方法,将应用退到后台。通过以上步骤,你就可以成功实现“Android 退到桌面 moveTaskToBack”的功能了。2 在按钮的点击事件中调用moveTaskToBack方法,将应用退到后台。1 创建一个按钮,用于触发“退到桌面”的操作。转载 2024-07-12 16:12:39 · 389 阅读 · 0 评论 -
Activity Deeplink启动来源获取源码分析
mReferrer很容易通过重写context的getBasePackageName()被伪造,在使用时一定要小心。通过ActivityManageService获取的Uid是无法被伪造的,可以考虑使用Uid来转换PackageName。作者:vivo互联网技术链接:https://juejin.cn/post/7030977861691375629来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-07-12 10:30:14 · 220 阅读 · 0 评论 -
在Activity中获取调用者包名,以及如何通过伪造mReferrerr让Activity无法获取调用者的包名
但是在Activity中,我们是无法touch到Binder线程的。如果这个值是SystemServer中填充的,然后发送到App中的,那么可以认为无法伪造,但是如果这个值依赖于调用者的传入,那么很可能可以被伪造。可以看到,我们调用startActivity的时候,并没有传入callingPackage参数,但是当调到ActivityManagerService的startActivityAsUser方法的时候,却出现了callingPackage参数,所以,肯定是调用流程中间的某一步,加入了这个参数。转载 2024-07-12 10:23:08 · 528 阅读 · 0 评论 -
解决No Activity found to handle Intent
activity转载 2024-07-11 21:03:53 · 946 阅读 · 0 评论 -
Android14 开发之Broadcast延迟及Service常驻等新特性说明
通过以上步骤,您可以在 Android 13 中根据Intent的action启动服务,并确保服务在后台运行时不会被系统终止。使用前台服务可以确保服务的持久性,并且可以处理新的权限要求和行为变化。Android14 开发之Broadcast延迟及Service常驻等新特性说明。转载 2024-07-03 10:07:46 · 339 阅读 · 0 评论 -
如何根据包名启动app
本文介绍了两种根据包名启动App的方法:使用隐式Intent和使用包名构建启动Intent。通过这些方法,我们可以方便地启动其他应用程序,并根据需要传递参数或接收返回结果。在实际开发中,我们可以根据具体需求选择适合的方法来实现根据包名启动App的功能。©著作权归作者所有:来自51CTO博客作者mob649e8166858d的原创作品,请联系作者获取转载授权,否则将追究法律责任android如何根据包名启动app。转载 2024-06-05 11:22:26 · 1628 阅读 · 0 评论 -
用IdleHandler进行性能优化
了解什么时候主线程被认为是空闲的至关重要。一般情况下,Android系统认为主线程在处理完所有消息后即处于空闲状态。IdleHandler通过这个定义,能够在保证不影响用户体验的前提下执行一些耗时的操作。// 没有消息,判断是否有IdleHandlercontinue;....// 执行IdleHandleri++) {try {if (!keep) {通过深度解析的原理和高级应用,让我们更好地利用这一工具进行性能优化。在实际项目中,灵活运用。转载 2024-04-09 15:19:02 · 160 阅读 · 0 评论 -
可以通过监听WifiManager的广播,来得知当WiFi的SSID(Service Set Identifier)变化时
在Android中,当WiFi的SSID(Service Set Identifier)变化时,可以通过监听。方法就会被调用,你可以在这里获取并处理新的SSID。这样,每当SSID变化时,转载 2024-04-09 14:00:29 · 195 阅读 · 0 评论 -
App接入Android指纹识别
Biometric Authentication 是一种使用面部或指纹识别进行用户认证的方式,这是保护敏感信息的方法之一。它对于需要用户每次打开应用都要进行认证的金融和医疗健康应用非常重要。转载 2024-03-18 17:04:59 · 371 阅读 · 0 评论 -
Serializable和Parcelable序列化权威指南
本文围绕与Parcelable展开了一系列高级疑难的面试问题,并提供了详细解答。了解并掌握这两种序列化方式的原理、优劣势以及适用场景对于Android开发者来说至关重要。必读!Android序列化权威面试指南,资深面试者的秘诀。转载 2024-03-06 10:15:38 · 136 阅读 · 0 评论 -
骚操作玩这么花?Android基于Act实现事件的录制与回放
在前文 ViewGroup 的文章中,我们知道了事件的伪造与保存,如何定制伪造事件时间轴,如何分发伪造事件,本文也是一个思路。整体思路基于前文 ViewGroup 的例子,还是把事件用对象封装起来,只是我们封装的对象换成了 MotionEvent ,并且不需要修改内部的操作时间了,我们用事件对象的 time 时间来制作伪造事件触发的时间轴。这样对于事件的录制我们就能直接通过 Activity 的事件分发 dispatchTouchEvent 中直接保存我们的事件对象了。//事件。转载 2024-02-27 19:39:45 · 647 阅读 · 0 评论 -
HandlerThread要记得quit
HandlerThread 属于老生常谈的问题了,它本质上一个自带Loop消息循环的Thread,「就是个线程」有时候我们自己也希望有个类似主线程类似的消息队列帮助我们处理消息,它就是做这个事情的。跟主线程有着异曲同工之妙,唯一的区别就是 主线程loop队列不能退出,它是随时创建随时关闭退出。奥妙就在下面红框的2个代码中,网上文章多如牛毛,这里就不赘述了。转载 2024-02-23 13:58:21 · 220 阅读 · 0 评论 -
10个Android LaunchMode知识点
在Android开发中,LaunchMode是一个综合性的话题,涉及到Activity的生命周期、任务栈的管理以及用户体验等多个方面。通过深入理解各种LaunchMode的特性,能在面试中展现出你对Android开发的深刻理解。希望本文对你在LaunchMode面试技巧的准备中有所帮助。掌握这10个Android LaunchMode问题,面试轻松搞定。转载 2024-02-21 10:52:58 · 308 阅读 · 0 评论 -
Android14 适配之——targetSdkVersion 升级到 34 需要注意些什么
此问题是因为一个 Kotlin 库改变了运行时的行为,即在执行 Class.forName("java.lang.ClassValue") 是否会返回一个 class 而引发的,如果应用是针对没有 java.lang.ClassValue 的旧版本开发的,那么这些优化会从 java.lang.ClassValue 派生的类中删除 computeValue方法。再说回前台服务,上述每个前台服务类型所需要的权限是不一样的,并且这些权限都被定义成了普通权限,在默认情况下是已经授予的,用户不能撤销这些权限。转载 2024-01-24 15:12:33 · 4304 阅读 · 0 评论 -
Lifecycle 深度解剖:三大类、五种状态、七大事件全面解读
Lifecycle是 Android 系统中一个重要的概念,它定义了 Activity 和 Fragment 在其生命周期中的各个状态,以及在每个状态下可以执行的操作。理解Lifecycle的实现原理和使用技巧,对于 Android 开发人员来说非常重要。Android Lifecycle 深度解剖:三大类、五种状态、七大事件全面解读!转载 2024-01-17 17:42:18 · 229 阅读 · 0 评论