自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HugMua的博客

个人学习笔记总结

  • 博客(226)
  • 收藏
  • 关注

原创 AndroidStudio - TOML

在项目上右键→New→File→Vewsion Catalogs,取名 libs,会自动加后缀 .version.toml(没有就直接创建文件取完整名称)。在 settings.gradle 中的 <dependencyResolutionManagement> 标签下使用 <versionCatalogs> 引入所创建的文件。将 Project 的 build.gradle 中 application 和 library 还原成默认书写方式。

2026-01-06 20:45:49 228

原创 Compose 封装 - 返回键监听

当界面回退不了了,系统默认逻辑是最小化到后台,不会退出APP。

2026-01-03 05:59:50 235

原创 Compose 封装 - 点击涟漪(水波纹)效果 Ripple

【代码】Compose 封装 - 去除点击涟漪(水波纹)效果。

2026-01-03 05:02:42 177

原创 Compose 封装 - 倒计时消失容器

【代码】Compose 封装 - 倒计时消失容器。

2026-01-03 04:56:12 159

原创 Compose 封装 - 点击防抖

适用于自带点击回调的组件如Button。

2026-01-02 22:45:28 220

原创 Compose 封装 - 禁止截屏

【代码】Compose 封装 - 禁止截屏。

2026-01-02 20:05:49 156

原创 Compose - 使用 Navigation3 正式版

路径可以是任何类型但通常是简单的可序列化数据类。使用密封接口方便调用和限制结构。路径无参用 data object,有参用 data class。添加 @Serializable 注解,使其可以序列化。继承 NavKey 接口,作为可以被数据持久化的标记。//无参//有参//嵌套路径。

2025-12-27 02:21:54 705

原创 Android Studio - 解决 Using ‘jvmTarget: String‘ is an error. Please migrate to the compilerOptions DSL

kotlinOptions {} 在 Kotlin v2.0 废弃了,v2.2.0之前还能用,之后需要迁移到新语法 compilerOptions {}。

2025-12-26 18:14:04 181

原创 Jetpack - Media3(MediaController 响应外部控制)

同 ExoPlayer,都是 Player.Listener。

2025-12-23 02:51:32 182

原创 Compose - 使用 Media3(ExoPlayer)

如果上面没有需要的组件,可以自行通过状态来构建自定义组件。状态获取方式播放暂停上一项下一项重复模式随机模式播放速度Icon(),

2025-12-20 02:57:25 810

原创 Compose 适配 - 全屏显示 EdgeToEdge

参考文章。

2025-12-18 23:24:38 415

原创 测试 - 概览

AndroidStudio 中的项目结构有三个目录:main(我们的业务代码)、test、androidTest。测试中能访问app中的代码,app中不能访问测试中的代码。仪器化测试 / 插桩测试。本地测试 / 单元测试。

2025-12-13 23:00:01 232

原创 测试 - 单元测试(JUnit)

assertArrayEquals(expectedArray, actualArray) 数组。assertNotSame(unexpected, actual) 对象。assertEquals(expected, actual) 值。assertSame(expected, actual) 对象。

2025-12-13 22:59:15 393

原创 设计模式 - 组合模式 Composite Pattern

将对象组合成树形结构以表示"部分-整体"的层次结构,以一致的方式处理树形结构中的所有对象。Component组件Composite复合节点Leaf叶子节点。

2025-12-03 14:10:34 209

原创 设计模式 - 责任链模式 Chain of Responsibility Pattern

通过将多个处理器(处理对象)以链式结构连接起来,使得请求沿着这条链传递,直到有一个处理器处理该请求为止。Handler处理器接口具体处理器。

2025-12-03 12:49:56 222

原创 设计模式 - 享元模式 Flyweight Pattern

尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。当程序中存在大量相似对象,每个对象之间只是根据不同的使用场景有些许变化时。Flyweight享元接口具体享元类Flyweight享元工厂。

2025-12-03 11:10:27 260

原创 设计模式 - 适配器模式 Adapter Pattern

就像电源适配器一样,让手里的两孔插头可以用在目标三孔插座上,两孔插头→电源适配器→三孔插座。

2025-11-25 22:59:32 295

原创 设计模式 - 单例模式 Singleton Pattern

确保一个类只有一个实例,并提供全局访问点,该类负责创建自身对象,同时保证仅单个对象被创建,且可直接访问(无需实例化)。

2025-11-19 23:33:24 194

原创 Android Studio - 使用 BuildConfig

可以定义全局变量,根据 debug 或 release 环境分别拿到不同的值。

2025-11-16 22:24:55 209

原创 网络 - 监听与优化

Android监测网络连接状态主要依赖ConnectivityManager,分为主动查询和被动监听两种方式,其中NetworkCallback(Android 5.0+)是推荐的监听方式,支持更细粒度的网络变化回调。Android 10(API 29)后,NetworkInfo(如getType())被标记为过时,推荐使用NetworkCapabilities判断网络类型,支持区分Wi-Fi、4G、5G等。通过注册NetworkCallback,监听网络连接/断开、网络类型变化等事件,无需频繁查询。

2025-11-06 05:00:03 596

原创 网络 - 缓存

当某些网络访问获取的内容不是每次都变的,而是短时间不变的(每月榜单)或长时间不变的(歌曲的信息),每次访问都联网获取的话,可能响应慢,不支持离线浏览,浪费用户和公司的流量费用和带宽占用。因此将已请求的内容存储在本地(内存或磁盘)用于后续复用。

2025-11-06 03:33:53 1048

原创 Compose - 使用 Lifecycle(生命周期)

LifecycleEventEffect 可自由指定需要监听的生命周期,LifecycleStartEffect 和 LifecycleResumeEffect 监听特定声明周期,还可以指定 key 来再次触发,必须回调指定方法可用来清理资源。

2025-11-02 00:55:51 359

原创 Jetpack - Media3(ExoPlayer 播放器控制)

将起始索引 fromIndex(包含) 到目标索引 toIndex(不包含) 之间的条目,移动到目标索引newIndex。fromIndex超出范围请求会被忽略,toIndex超出范围则一直截取到尾部,newIndex超出截取后剩余的范围则为列表尾部。播放列表中的项之间可以无缝切换,无格式相同要求,甚至无媒体类型相同要求,也就是播放列表可以同时包含图片、视频、音频。调整速率(不改变音调),参数 speed 必须大于 0,1.0 为正常速率,2.0 为两倍速,0.5 为半速。

2025-10-27 04:01:12 1096

原创 Jepack - DataStore

在 top-level 使用 preferencesDataStore() 提供的属性委托来获取 DataStore<Preferences> 实例,扩展属性给到 Context 因为创建实例会用到上下文,只提供 getValue() 因此属性是val。注意 preferencesDataStore() 不能保证对象单例,如果在同一进程中为给定文件创建多个。存储位置:/data/user/0/包名/files/datastore/文件后缀:preferences_pb。实例,在读取或更新数据时将抛出。

2025-10-23 03:17:52 862

原创 Compose - 使用 CameraX

【代码】Compose - 使用 CameraX。

2025-10-18 02:20:42 170

原创 设计模式 - 策略模式 Strategy Pattern

定义接口,多个实现类,构造传入类中调用。

2025-10-05 08:47:04 296

原创 设计模式 - 观察者模式 Observer Pattern

复杂、样板多、易泄露。

2025-10-05 08:45:37 133

原创 Compose 可组合项 - 轮播图 Carousel

多浏览轮播item宽度逐渐变小,可以单独设置最小那个item的最小/最大宽度。有吸附效果,容器左边界不会部分显示item。非容器化轮播item宽度固定。没有吸附效果,滑到哪里是哪里。

2025-09-24 01:41:36 964

原创 Compose 修饰符 - 外观(尺寸、样式、布局、行为)

通过链式调用串接API,因此顺序会影响最终结果(例如边距padding)。

2025-09-23 19:05:11 701

原创 Compose 修饰符 - 阴影

shadow() 会根据组件在屏幕位置呈现不同角度的光照阴影,可以设置阴影高度,更精细的自定义(如阴影扩散或半径等属性)使用另外两个。val offset: DpOffset, //沿 x 轴和 y 轴定位阴影的几何图形。从内容边界向内绘制阴影,由低变高。如果内边距不够,内容不是在阴影最高的那一圈内,重叠部分会显得割裂。实现阴影,传给 dropShadow() 或 innerShadow() 使用。在内容之上绘制,在其它内容(如背景)之后调用。

2025-09-20 03:40:48 870

原创 Compose - 使用 Coil

相比 Glide、Picasso 而言,Coil 更专注于 Compose 且它的代码使用 Kotlin。

2025-09-03 04:04:01 797

原创 Android - 资源类型 MINE Type

MINE(Multipurpose Internet Mail Extensions)最初是为了标识电子邮件附件的类型,在 HTML 中使用 content-type 属性表示,描述了文件类型的互联网标准。

2025-08-21 23:22:42 359

原创 Android - 统一资源标识符 Uri

URI(Uniform Resource Identifier)统一资源标识符,用于标识资源的字符串(如图片、网页、文件、应用等)。

2025-08-21 20:34:39 416

原创 Android 优化 - 日志 Log

下方代码,当日志开关设置为 false 时,对 message 的传参虽然会被丢弃,但还是会先执行得出该参数的代码。

2025-08-03 16:51:47 327

原创 Compose 适配 - 键鼠模式

不止触摸交互,在 ChromeOS 或外接键鼠的设备上,需要考虑焦点、悬停、右键等操作逻辑。

2025-07-24 23:47:59 286

原创 Compose 适配 - 折叠屏形态 FoldingFeature

/通过全局入口AppTheme获取更符合直觉,因此设为private> { null }//用于获取折叠屏信息/*** 判断折叠屏是不是桌面模式*//*** 判断折叠屏是不是图书模式*/) {.value???

2025-07-24 00:46:11 404

原创 Kotlin - 边界控制 coerceIn、coerceAtLeast、coerceAtMost

当需要对数值进行范围限制时,通常会用 if() else if() else,这样会写很多判断,使用 coerceXXX() 函数来简化,适用于实现了 Comparable 接口的对象。限制数值在给定范围之内,超出则返回边界值。确保值不小于指定最小值,小于则返回最小值。确保值不大于指定最大值,大于则返回最大值。

2025-06-16 18:49:25 793

原创 Jetpack - WorkManager

普通环境继承 Work,协程环境继承 CoroutineWorker。重写 doWork() 用于耗时任务,需要返回一个 Result 用于将任务结果通知给 WorkManager:success成功、failure失败、retry重试。

2025-04-27 12:03:00 294

原创 Compose 适配 - 显示空间 WindowSizeClasses(响应式排版 & 自适应布局)

传统根据屏幕大小和方向做适配的方式已不再适用,APP的显示方式还可能是:手机平板的分屏、ChormeOS的窗口可调整大小、折叠设备的屏幕形态切换等显示方式,因此需要根据可用显示空间做适配。

2025-04-11 23:34:14 1221

原创 Android Studio - 解决 Please Select Android SDK

点击 Run 后弹窗,图一位置出现图二提示。

2025-04-09 22:41:18 2034 1

空空如也

空空如也

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

TA关注的人

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