- 博客(625)
- 资源 (77)
- 收藏
- 关注
原创 架构的力量
本文提出从"铺代码"到"做架构"的四维进阶路径:1)理论输入,推荐《架构整洁之道》等经典书籍培养架构思维;2)深度拆解现有代码,通过画逻辑图、模拟破坏等方式理解设计原理;3)刻意练习,写代码时思考单点依赖、职责边界等架构问题;4)角色转变,从执行者变为标准制定者,用"懒人思维"提升效率。文章强调架构思维是通过实践培养的全局博弈感,而非单纯理论学习。
2026-04-07 15:31:38
73
原创 初级开发者→架构师核心分水岭:从 “铺代码” 到 “编写协议”
从"铺代码"到"编写协议":程序员思维升级的关键跃迁 职业发展的核心在于思维转变:初级开发者关注具体实现("铺代码"),而架构师注重建立规范("编写协议")。前者直接处理细节(如写死数值、重复逻辑),导致修改成本高;后者通过定义统一标准(如间距函数、容器组件),实现高效协同和灵活扩展。这种转变体现在数值管理、逻辑封装、布局处理等维度,本质是建立开发契约——用前期设计成本换取后期维护便利。实践建议:抽离属性命名、封装通用逻辑、预判
2026-04-07 15:27:18
19
原创 推荐页核心 UI 实现逻辑说明
这篇代码分析展示了推荐页面的核心UI实现逻辑,主要包含三个关键部分: 分层架构设计: 容器层处理基础布局和状态管理 规则层动态控制网格项跨度 表现层专注于UI渲染 核心功能实现: 通过getxxxxxGridItemSpan函数智能分配网格空间,支持不同内容类型(歌曲、横幅等)的自适应布局 使用getItemPadding扩展函数实现类型感知的内边距控制 SimpleDataScreen组件封装了加载状态管理 技术特点: 采用Compose声明式UI 实现内容与布局的完全解耦 通过类型系统保证UI一致性 支
2026-04-07 15:21:35
153
原创 Kotlin 语法深度拆解:从 Java 匿名内部类到极简 Lambda 完整演进
摘要: 本文通过三个阶段展示了Kotlin从Java匿名内部类到极简Lambda的语法演进:1)传统匿名内部类写法;2)利用SAM转换和尾随Lambda优化代码结构;3)最终使用隐式参数it实现极简写法。核心概念包括Lambda表达式(支持单参数it简写)、SAM转换(适用于单方法接口)和尾随Lambda语法。关键结论指出:it代表回调参数而非函数入参,且多方法接口无法使用SAM转换和Lambda简写,必须采用完整匿名类实现。这种演进显著提升了代码简洁性和可读性。
2026-04-07 11:23:03
185
原创 架构设计深度解析:策略模式 + 抽象工厂在UI适配中的高级应用
摘要:本文解析了一种结合策略模式与抽象工厂的UI适配架构设计。通过BasePageConfig抽象基类定义布局规则,LandPageConfig和PortPageConfig具体实现类分别处理横竖屏布局参数,实现了业务逻辑与布局参数的彻底解耦。该设计具有三大优势:1) 将琐碎的布局数值抽离到配置类,保持业务代码整洁;2) 利用SpanSizeLookup实现灵活布局分配;3) 通过单例模式和抽象方法强制保证类型安全。这种配置化思想使UI调整变得简单高效,只需修改配置类即可实现全局布局变更。
2026-04-07 10:15:58
167
原创 Android Navigation 组件页面跳转方法说明
这段代码展示了Android Navigation组件实现页面跳转的典型方法。它通过NavController执行跳转,使用三个关键参数:1)目的地ID(R.id.action_to_history)指定目标页面;2)null表示不传递参数;3)navOption配置跳转动画和栈管理规则。该方法被设为private,说明仅供当前组件内部使用。整个过程类似于打车:指定目的地、不携带行李、选择特定路线和速度要求。
2026-04-07 09:54:22
215
原创 Kotlin 协程:withContext 与 async 核心区别与使用场景
Kotlin协程中withContext和async的核心区别在于定位:withContext用于获取结果,async用于并发。withContext在单任务场景下更优,写法直观(直接返回结果)、异常处理安全(立即抛出异常)、性能更轻量(不创建新协程)。而async则适用于需要并行执行多个任务的场景,如同时发起多个网络请求。单任务切换线程优先使用withContext,多任务并行必须使用async。
2026-04-07 09:41:27
173
原创 Jetpack Compose 对齐核心金律(彻底避坑)
Jetpack Compose中对齐的核心规则是:Modifier的.align()仅作用于组件自身在父容器中的位置,不影响子组件排列。要让Column内部子组件居中,必须在Column构造参数中设置horizontalAlignment = Alignment.CenterHorizontally,而非使用Modifier。.align()控制组件在父容器中的位置,horizontalAlignment才控制子组件排列。当Column撑满宽度时,Modifier中的水平对齐会失效,必须通过构造参数实现子组
2026-03-31 15:43:42
34
原创 Compose 布局进阶:height vs heightIn 深度解析
Android UI开发中,Modifier.height()和.heightIn()的选择直接影响布局质量:.height()强制固定高度,可能导致内容截断;.heightIn()设置最小高度,内容超限时自动扩展。固定导航栏推荐.height(),列表项和多语言场景应选.heightIn()。最佳实践包括为动态内容添加垂直padding,避免同时使用两种修饰符,并配合垂直对齐。核心原则:固定布局用height,弹性需求用heightIn。
2026-03-25 10:16:55
199
原创 Kotlin 进阶指南:中缀函数 (Infix Function)
摘要:Kotlin中缀函数(infix)是一种特殊的函数调用方式,通过省略点和括号使代码更接近自然语言。本文介绍了中缀函数的定义方法(需使用infix关键字、必须是成员/扩展函数、仅接收一个参数),并展示了实际应用场景,包括创建键值对、位运算和Compose配置等。文章还澄清了中缀函数的实现原理并非依赖空格,而是编译器检查机制,最后给出了使用建议:适合表达二元关系时使用,复杂逻辑仍需普通函数。
2026-03-25 10:02:02
200
原创 CompositionLocal provides 核心逻辑讲解
CompositionLocal通过键值对机制实现隐式数据传递,类似Map的put/get操作。LocalAppColors作为Key,provides建立与具体colors对象的绑定关系。相比Map的优势在于自动注入和动态响应——数据变化时相关组件自动更新。本质上,provides创建了一个ProvidedValue对象,在指定UI分支内为LocalAppColors提供具体值,无需显式传递参数。
2026-03-25 09:58:57
27
原创 颜色透明度转换技术文档(Android/Compose)
本文介绍了Android/Compose开发中颜色透明度转换的技术要点。核心原理是将透明度百分比转换为十六进制值(如40%→66),并提供了常见透明度速查表。重点分析了Android XML(#AARRGGBB格式)和Compose(0xAARRGGBB格式)的差异,特别强调Compose中错误的顺序会导致颜色异常。最佳实践推荐使用.copy()方法设置透明度,既避免计算错误又提升可读性。注意事项包括:不完整色值会导致全透明,以及Figma导出的RRGGBBAA格式需要调整顺序。开发者应特别注意不同平台的颜
2026-03-25 09:52:43
172
原创 排名组件 RankingBadge
摘要:本文介绍了一个通用排名组件RankingBadge的实现方案。该组件采用Kotlin编写,具有以下特点:1) 支持自定义背景色和排名数字;2) 遵循项目UI规范(appDimens & Tokens);3) 优化视觉效果(移除冗余阴影,采用微圆角);4) 适配列表布局(weight(1f)保证不挤压)。组件优势包括性能优化、结构清晰、自适应强和代码精简,并提供了3位数字排名的适配建议。该组件可直接放入项目UI组件库使用。
2026-03-25 09:28:51
33
原创 Jetpack Compose 抽象属性 @Composable 函数类型 完全解析
本文深入解析了Jetpack Compose中@Composable注解与函数类型结合的核心用法。通过定义抽象属性backgroundColor作为动态颜色生成函数,实现了在Compose组合环境中灵活获取颜色值的能力。文章详细拆解了抽象属性、@Composable注解和函数类型三部分的含义与协同机制,对比了固定值与动态函数的区别,并提供了完整代码示例。这种模式特别适用于主题切换、暗黑模式适配和动态换肤等场景,是构建灵活UI架构的核心技术。
2026-03-24 17:33:25
184
原创 compose remember 与 rememberSaveable 核心区别
remember与rememberSaveable核心区别在于状态保存方式:remember仅保留重组期间状态,在配置更改时重置;rememberSaveable通过Bundle保存状态,可在横竖屏切换等场景恢复数据。remember适用于临时UI状态,rememberSaveable适合保存用户输入等持久数据。自定义对象需实现Saver或添加@Parcelize注解才能使用rememberSaveable保存。
2026-03-24 13:42:56
179
原创 Compose 规范:Modifier 顺序对按压态与透明度的影响
摘要:Jetpack Compose中Modifier顺序影响UI表现,特别是.alpha()位置对按压效果至关重要。将.alpha()放在链式末尾(推荐做法)能确保整个组件统一应用透明度,避免禁用状态下按压遮罩异常显示。规范建议:基础属性→交互逻辑→交互装饰→全局状态表现(alpha/scale等)。关键检查点:禁用态下按压效果异常时,应检查.alpha()是否位于clickable或pressedOverlay之前。(149字)
2026-03-19 17:39:45
317
原创 MVI架构3--实战示例:我的收藏页面
本文展示了一个基于MVI架构的“我的收藏”页面实现。核心包含三个要素:1) UiState管理页面状态(加载状态、收藏项、收藏状态);2) Intent处理用户操作(获取数据、切换收藏);3) UiEffect处理一次性事件(如Toast提示)。ViewModel负责逻辑处理,根据Intent更新状态和发送Effect。Compose UI负责渲染状态和监听Effect,实现单向数据流。这种设计能有效保持状态一致性(如旋转屏幕后收藏状态保留),同时避免重复触发副作用,使代码结构清晰、职责分明。
2026-03-19 13:39:32
30
原创 mvi架构2-UiEffect作用
MVI架构中UiEffect的作用 在MVI架构中,UiEffect用于处理瞬时UI动作(如弹Toast、导航跳转),与UiState形成互补。UiState描述持久界面状态(如列表数据),而UiEffect代表一次性事件,避免因状态恢复导致重复触发。例如播放音乐时,UiState控制播放按钮状态,UiEffect触发播放动作,防止旋转屏幕时音乐重复播放。这种分离确保了逻辑清晰,避免内存泄漏和测试难题,符合单向数据流原则。
2026-03-19 13:18:23
234
原创 MVI架构1--理解mvi架构
MVI架构通过三个核心组件实现单向数据流:Intent(用户动作)、UiState(界面状态)和UiEffect(一次性效果)。Intent触发ViewModel处理逻辑,产生新的UiState(持久状态)和UiEffect(瞬时动作)。典型场景包括数据加载(Intent→UiState)、简单操作(Intent→UiEffect)和混合操作(Intent→UiState→UiEffect)。关键区分在于UiState存储持久界面状态,而跳转等瞬时动作必须使用UiEffect避免重复触发。这种架构通过明确职
2026-03-19 13:13:10
160
原创 Compose 调用层参数设计规范(基于默认值复用原则)
本文提出了Compose调用层参数设计规范,基于"默认值复用原则"的核心思想:调用层仅传递差异化数据,通用UI配置应在中间层通过默认参数定义。通过类比订购笔记本电脑的分层决策过程,形象说明各层级职责。文章对比了错误写法(重复传递通用配置)和正确写法(仅传差异化数据),并阐述了该规范的优势:提升代码可读性、降低改版成本。最终总结出调用层应遵循"最小传参原则",仅传递与默认配置不同的数据,而通用配置统一在中间层定义,从而优化代码结构并提高维护效率。
2026-03-17 10:59:56
54
原创 Compose 三层结构设计规范1(基于Slot API)
Jetpack Compose三层结构设计规范基于Slot API,将组件开发分为结构层、中间层和调用层。结构层专注布局骨架,不设业务默认值;中间层定义业务默认配置;调用层仅传递差异化数据。这种分层设计实现了单点维护、视觉统一和高效开发,使UI改版只需修改结构层,业务调整只需改动中间层默认值,调用层代码保持简洁。规范通过明确各层职责和参数处理规则,提升了组件复用性和维护性。
2026-03-17 10:57:23
414
原创 Jetpack Compose ChipItemWithTwoLinesCard 组件 API 规范实现
本文介绍了遵循Jetpack Compose官方API设计规范实现的双行文本Chip卡片组件。组件参数严格按必填参数→Modifier→可选参数→尾随Lambda的顺序排列,确保调用便捷性和一致性。实现上优化了颜色默认值处理,保证主题切换时颜色实时刷新,并支持动态调整文本间距,副标题为空时自动隐藏。该设计使组件使用更直观,与系统组件保持一致,降低了学习和使用成本。
2026-03-12 09:49:45
157
原创 颜色中的Alpha小结
本文介绍了颜色表示中的Alpha通道及其转换方法。Alpha表示不透明度,范围0-1(0完全透明,1完全不透明)。以rgba(166,131,106,0.16)为例,16%不透明度可通过公式计算:255×0.16≈41(十进制),转换为十六进制29。文章提供了两种代码实现方式,并给出常用透明度对照表(如16%对应29)。同时解释了计算机图形学中0-1到00-FF的映射原理,方便开发者在Figma等工具中快速查询透明度值。
2026-03-10 15:37:32
245
原创 Jetpack Compose 中的 CompositionLocalProvider 指南
摘要: Jetpack Compose中的CompositionLocalProvider用于隐式传递全局数据(如主题),避免显式参数传递的繁琐。实现分为三步:1) 定义CompositionLocal键;2) 使用CompositionLocalProvider注入数据;3) 通过.current在子组件中消费数据。与显式传递相比,它更优雅且精准,仅需组件按需获取。建议封装为对象(如AppTheme)提升可读性,并遵循就近原则和默认值保护,避免滥用非全局数据。适用于主题、国际化等横切关注点场景。
2026-03-06 15:25:01
142
原创 compose中什么是中缀函数
摘要: 中缀函数的核心在于"infix"关键字,而非空格格式。"缀"指连接/附着,"中缀"即函数名位于两个参数中间。中缀函数本质是语法糖,将a.f(b)简化为a f b,提升可读性(如Compose的provides绑定)。使用时需满足:1)必须是成员/扩展函数;2)仅一个参数。空格仅是中缀调用的书写形式,真正定义来自infix关键字。这种设计借鉴数学运算符(如+),使代码更直观。
2026-03-06 14:22:35
271
原创 基于协议的依赖注入主题引擎:从“硬编码”到“一键换肤”
本文提出了一种基于协议的依赖注入主题引擎,将主题管理流程分解为生产、运输、广播、消费四个环节。通过定义接口协议(IAppTheme)、实现具体主题(如CommonAppTheme)、使用CompositionLocal广播机制,以及提供便捷消费方式(appShapes扩展属性),实现了主题一键切换功能。该系统解决了传统硬编码带来的修改成本高、难以复用等问题,支持多品牌换肤、设计规范落地和跨端适配,显著提升了大型应用的视觉风格管理效率。
2026-03-06 13:39:05
367
原创 基于 IAppTheme 的响应式主题引擎架构
本文档介绍了一种基于 IAppTheme 接口的响应式主题引擎架构,采用抽象工厂与依赖注入模式,实现 UI 样式与业务逻辑的解耦。架构分为三层:定义层(接口协议)、实现层(具体数值)和注入层(环境绑定)。通过 CompositionLocal 将主题数据注入全局环境,组件只需从环境中获取资源,无需硬编码。该架构支持多品牌/车型适配,修改主题只需替换实现类,具有高内聚低耦合、零重构压力等优势,使样式修改更安全高效,同时提供清晰的依赖关系。
2026-03-06 13:27:00
318
原创 Compose 中的 Indication
摘要:Compose中的Indication机制专门处理点击反馈视觉效果(如水波纹扩散),通过InteractionSource收集交互信号,Indication呈现视觉响应。开发者可使用默认Ripple效果或自定义颜色/边界,也可完全禁用反馈。关键点包括:1) 默认.clickable自带波纹;2) 用rememberRipple定制效果;3) 设置indication=null可移除反馈。注意执行顺序(clip需在clickable前)和必须传递interactionSource。该机制通过视觉反馈增强
2026-03-06 10:46:29
247
原创 Android View 与 Compose 布局裁剪差异(clipChildren 机制)
本文对比了Android传统View系统与Jetpack Compose在布局裁剪行为上的差异。View系统默认开启clipChildren=true自动裁剪超出边界的子控件,而Compose容器默认不裁剪子项,允许自由溢出显示。要实现XML中的裁剪效果,Compose需显式使用clipToBounds()或形状裁剪Modifier。这种设计差异源于性能优化(避免不必要的Canvas操作)、动画友好性(支持元素临时溢出)以及Offset机制纯粹性(仅影响绘制层)。开发者应根据场景选择是否裁剪:装饰性元素建议
2026-03-03 17:29:39
276
原创 compose 实现自定义按压背景色
本文介绍了一种实现按压背景色反馈的方案,通过监听点击事件在内容上方绘制半透明遮罩层。核心原理是利用InteractionSource获取交互状态,配合collectIsPressedAsState()转换为可感知状态,并使用drawWithContent进行高效绘制。代码实现包含一个pressedOverlay修饰符函数,支持自定义遮罩颜色和形状。使用时需注意clickable和pressedOverlay必须共享同一个interactionSource实例,并建议禁用默认的Ripple波纹效果。该方案避免
2026-03-03 16:57:22
72
原创 Figma 查看间距方法
摘要:Figma查看间距的快捷方法是按住Alt/Option键并悬停元素,会显示间距数值和参考线。进阶技巧包括用Ctrl/Cmd选中嵌套元素,以及开发模式自动显示间距。还可使用Spacing Measure等插件一键生成标注。这些方法帮助设计师快速测量UI元素间的精确距离。
2026-03-02 15:21:19
416
原创 Compose 中 Box 布局核心概念:ContentAlignment vs Modifier.align
Jetpack Compose中Box布局的对齐机制分为容器级(contentAlignment)和元素级(Modifier.align)两种方式。contentAlignment作为Box构造参数影响所有子组件,而Modifier.align则允许单个子组件覆盖全局设置。Box支持二维对齐(9种方位),不同于Row/Column的单维度对齐。Modifier.align优先级更高,适用于需要特殊定位的场景,而contentAlignment适合统一对齐的情况。注意不同布局的作用域限定:Box支持二维对齐,
2026-02-27 16:48:50
527
原创 adb查看android设备像素和密度
摘要:使用adb命令可以查看Android设备的显示参数。adb shell wm size可获取设备像素分辨率,显示物理硬件分辨率或手动修改后的覆盖分辨率;adb shell wm density则用于查询设备显示密度。这两个命令有助于开发者了解设备显示特性并进行适配调试。(99字)
2026-02-27 11:06:56
38
原创 深入掌握 Jetpack Compose Image 的 contentScale:图片缩放完全指南
Jetpack Compose的contentScale参数提供了7种图片缩放策略,可精确控制图片在容器中的显示方式。主要分为三类:基础填充型(FillBounds/FillWidth/FillHeight)会改变原始比例;适应裁剪型(Fit/Crop)保持比例但可能留白或裁剪;特殊型(Inside/None)控制缩放边界。选择时需考虑是否允许裁剪、是否要填满容器以及是否保持比例,结合alignment参数可进一步优化显示效果。常用场景推荐:完整显示用Fit,无空白用Crop,精确控制用None。掌握这些策
2026-02-27 09:52:44
732
原创 Compose编程思想-compose中的 UI 本质上是“没有大脑”的
Compose UI 采用"无大脑"设计,完全由状态驱动。UI组件仅被动渲染接收到的状态,不处理任何业务逻辑,所有状态判断和管理都由上层逻辑完成。这种设计将UI作为纯粹的执行者,与状态管理逻辑解耦,体现了Compose状态驱动的核心思想。
2026-02-26 14:44:08
270
原创 compose 编程思想-UI 完全由状态驱动
Compose采用声明式UI框架,核心思想是UI完全由状态驱动。与传统命令式UI不同,开发者只需定义状态与UI的对应关系,Compose自动监听状态变化并更新UI,无需手动操作控件。状态是UI唯一数据源,与业务逻辑解耦,提升了组件复用性。优势包括简化代码、易于维护和提升复用性,只需调整状态传入即可适应新业务场景,无需修改UI组件本身。
2026-02-26 14:38:51
65
原创 compose 编程思想-组件只关心UI展示
本文阐述了Compose声明式UI的核心设计原则:UI应是状态的纯粹映射而非类型判断。文章对比了命令式与声明式编程的区别,指出类型判断会破坏组件纯粹性、增加耦合度。正确的做法是将业务逻辑转化为UI状态后传入组件,使组件仅关注展示能力而非业务含义。通过案例解析,展示了如何将状态推导移至上层,保持组件的"纯函数"特性。最终目标是让UI代码直接描述界面展示,而非隐含业务逻辑,实现可预测的组件行为。
2026-02-26 14:33:13
321
原创 compose中 align使用小结1-Modifier中的align
本文介绍了Compose布局中的Modifier.align()修饰器在不同容器中的作用。在Box中可实现二维平面上的九种对齐方式;在Column中仅控制水平方向对齐(左/中/右);在Row中仅控制垂直方向对齐(顶/中/底)。文章对比了三种容器的对齐特性,并给出最佳实践建议:注意作用域区分、与weight()配合使用,以及了解对齐优先级规则。该修饰器是精准控制子控件位置的重要工具。
2026-02-26 10:46:38
368
原创 Compose 中 Text 控件对齐方式深度总结
本文总结了Compose中Text控件的对齐方式:1)内部对齐通过textAlign、lineHeight和wrapContentHeight控制文字在文本框内的位置;2)外部对齐由父容器(Box/Column/Row)的特性决定。核心区别在于点击热区和基线对齐的差异,Box(contentAlignment=Alignment.Center)是最推荐方案,提供最大点击面积且代码清晰。文章还对比了不同场景下的推荐写法和视觉效果,并附有代码示例说明。
2026-02-18 17:42:36
337
原创 ConstraintLayout写法和Box写法比较
本文介绍了两种在Jetpack Compose中实现复杂布局的方案:方案一使用ConstraintLayout实现链式布局,通过约束条件精确控制元素位置;方案二采用原生Box布局,通过align修饰符实现元素居中/置底。分析指出方案二更优,因其具有更小的渲染开销、更简洁的代码结构,且能达到相同的布局效果。特别强调了在Compose中应避免使用Spacer占位,推荐采用更高效的布局方式来实现扁平化布局层级。
2026-02-15 17:53:09
71
Office2010安装需要的MSXML文件
2018-02-10
Android大屏幕适配demo
2018-02-02
VolleyDemo
2018-01-19
自定义view学习一
2018-03-31
自定义view-google文档代码整理
2018-04-01
Android MVPDemo
2018-02-27
rxjava学习代码
2018-02-13
Android drawerLayout
2018-01-19
volley.jar文件
2018-01-11
android fragment生命周期测试
2018-04-24
Android photoWallDemo
2018-02-05
RNRedux.zip
2020-07-23
跑马灯效果
2018-04-24
ContactBackupStudy.zip
2019-11-13
gradle-3.4-all和gradle3.5-all
2018-05-09
app-debug.apk
2020-01-15
MarkdownPad2.5安装文件和注册码
2018-06-04
android-sdk_r24.4.1-windows
2018-11-06
AwesomeProject.zip
2020-02-15
source_insight4.0破解版
2018-07-09
gradle-4.7-all和gradle-4.7-bin
2018-05-09
sourceInsight4
2018-10-16
google浏览器字节码转换扩展程序
2018-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅