文章目录Android 样式和主题Style 与 Theme 的区别Style 样式Theme 主题作用于Activity作用于Application 和 ? 和 android 和 attr/ 和 ?android:attr/?和?attr/android?android:attr/Theme常见写法常见主题样式设置Android 样式和主题Style 与 Theme 的区别两者本质上是同一种资源 ——style。区别只在于作用范围与生效方式作用于单个 View 时称样式作用于 Application / Activity / View 树时称主题。主题不是另一种语法而是样式在更大作用域上的应用除控件属性外还能定义窗口属性状态栏、导航栏、窗口背景等以及控件的默认样式。对比项Style 样式Theme 主题使用方式stylestyle/Xxx无android:前缀android:themestyle/XxxManifest 或 View 上作用对象单个 ViewApplication / Activity / 单个 ViewAPI 21及其子 View数量限制一个 View 只能指定一个 style一个界面只有一个生效主题但可逐层覆盖典型属性宽高、边距、gravity、drawable、字号配色、窗口属性、控件默认样式、textAppearance主题的作用域可以逐层覆盖Activity 主题覆盖 Application 主题View 上的android:theme覆盖 Activity 主题。也就是就近原则。代码中使用setTheme()必须在setContentView()之前调用才生效。Style 样式样式是属性宽高、颜色、字号、边距等的集合主要用于 View。一个 View 只能通过style属性指定一个样式样式之间可以用parent继承文字部分还可以再叠加android:textAppearance。定义样式?xml version1.0 encodingutf-8?resources!-- 建议显式继承控件的默认样式否则 AppCompat / Material 控件会丢失 tint 等默认效果 --stylenameRadioButtonStyleparentWidget.AppCompat.CompoundButton.RadioButton!-- LinearLayout 权重均分时宽度必须写 0dp写 wrap_content 会先按内容分配再分剩余空间导致宽度不等 -- item nameandroid:layout_width0dp/item item nameandroid:layout_heightmatch_parent/item item nameandroid:layout_weight1/item item nameandroid:buttonnull/item item nameandroid:drawablePadding10dp/item item nameandroid:gravitycenter/item item nameandroid:textSize16sp/item/style/resources使用样式RadioGroupandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalRadioButtonstylestyle/RadioButtonStyleandroid:drawableTopdrawable/homeandroid:texthome/RadioButtonstylestyle/RadioButtonStyleandroid:drawableTopdrawable/findandroid:textfind/RadioButtonstylestyle/RadioButtonStyleandroid:drawableTopdrawable/messageandroid:textmessage//RadioGroupTheme 主题主题是样式在更大作用域上的应用可以作用于 Application、ActivityAPI 21 起还可以作用于单个 View / ViewGroupandroid:theme。主题可以看作是样式的加强版除控件属性外还能定义窗口属性和控件默认样式。作用于Activity定义主题!-- 注意parent 用 Theme.MaterialComponents.* 时必须依赖 com.google.android.material:material 库 否则编译期找不到该主题 --stylenameActivityThemeparentTheme.MaterialComponents.DayNight.DarkActionBaritem namecolorPrimary#FF0000/item !-- MDC 主题的状态栏色是 colorPrimaryVariantcolorPrimaryDark 只对 AppCompat 主题生效 -- item namecolorPrimaryVariant#00FF00/item !-- 强调色AppCompat 用 colorAccentMDC 已废弃改用 colorSecondary -- item namecolorSecondary#0000FF/item !-- 主题里直接写android:textColor /android:textSize 对普通 TextView 无效被默认 textAppearance 覆盖 改默认文字颜色用android:textColorPrimary字号/字体请写 textAppearance 或 style -- item nameandroid:textColorPrimary#FF0000/item/style使用主题activityandroid:name.MainActivityandroid:themestyle/ActivityTheme/作用于Application将刚才的主题放在application标签里applicationandroid:themestyle/ActivityTheme 和 ? 和 android 和 attr/ 和 ?android:attr/表示引用资源默认当前应用自己的包完整形式是[package:]type/namestring/app_name引用本应用的资源id/xxx新建 idandroid:drawable/xxx、com.xxx:type/name指定包名的资源stringnameapp_namehello/stringTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textstring/app_name/?和?attr/?表示引用当前主题中的属性值不是资源值主题切换时取值随之变化这是换肤/深色模式的基础?attr/等价于?即?attr/nameColor与?nameColor写法等价都表示取当前主题中nameColor这个属性的值。以下三个是 AppCompat 主题的属性colorPrimary主色如标题默认颜色colorPrimaryDark第二颜色如状态栏颜色colorAccent强调色如 FloatingActionButton 背景色stylenameAppThemeparentTheme.AppCompat.Light.DarkActionBaritem namecolorPrimarycolor/colorPrimary/item item namecolorPrimaryDarkcolor/colorPrimaryDark/item item namecolorAccentcolor/colorAccent/item/styleTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textstring/app_nameandroid:textColor?colorPrimaryandroid:textSize24sp/androidandroid表示引用 Android 内置的公开系统资源位于android包。ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:srcandroid:drawable/ic_menu_view/?android:attr/拆成三段理解?android:attr/xxx片段含义?取值方式不是引用资源而是去当前主题里查某个属性的值android:包名这个属性由 Android 框架framework 包定义attr/xxx属性名attr/是固定写法可省略所以?android:attr/textColorPrimary “去当前主题里查 android 包定义的textColorPrimary属性的值”。两种等价写法android:textColor?android:attr/textColorPrimary!-- 完整写法 --android:textColor?android:textColorPrimary!-- 简写等价 --关键点值来自你的主题不是系统常量?android:attr/xxx不是取系统自带的固定值而是查当前主题给这个属性赋了什么值框架只是在attrs.xml里声明了这个属性名。stylenameAppThemeparentTheme.MaterialComponents.DayNight.NoActionBaritem nameandroid:textColorPrimary#333333/item !-- 覆写它 --/styleTextViewandroid:textColor?android:attr/textColorPrimary/!-- 结果 #333333 --换成DayNight主题的夜间模式同一个引用会自动取到夜间的值 —— 这才是?的意义也是换肤/深色模式的基础。和android:的区别android:backgroundandroid:drawable/dialog_holo_light!-- 静态永远是这一张图 --android:background?android:attr/selectableItemBackground!-- 动态随主题变化 --android:→ 指向具体资源文件值固定?android:attr/→ 查主题中的属性值换主题就换结果什么时候加android:前缀规则只有一条引用时的名字必须和主题里item name...完全一致。!-- 主题里带 android: 前缀 → 引用时也带 --itemnameandroid:statusBarColor#000/itemandroid:background?android:attr/statusBarColor!-- 主题里不带前缀AppCompat/MDC 自定义的属性→ 引用时也不带 --itemnamecolorPrimary#f00/itemandroid:textColor?attr/colorPrimaryTheme常见写法注意区分系统主题与库主题带android:style/前缀的是系统内置主题只能在对应 API 及以上使用Theme.AppCompat.*、Theme.MaterialComponents.*来自 androidx 库与系统版本无关可向下兼容。Holo 主题Android 3.0 / 4.0 默认API 11android:style/Theme.Holo.LightMaterial 主题Android 5.0 引入API 21不是 4.0android:style/Theme.Material.LightAppCompat 主题androidx.appcompat 库兼容到 API 14与 5.0 无关Theme.AppCompat.Light.DarkActionBarMaterialDesign 样式Material Components 库需依赖 com.google.android.material:materialTheme.MaterialComponents.Light.NoActionBarMaterial3 样式Material3 库属性命名与 MDC 不同Theme.Material3.DayNight.NoActionBar常见主题样式设置!--应用的主要颜色--itemnamecolorPrimary#ff0000/item!--应用的次要颜色AppCompat 主题用 colorPrimaryDarkMDC 主题用 colorPrimaryVariant写 colorPrimaryDark 不会作用于状态栏--itemnamecolorPrimaryDark#00ff00/item!--默认选中颜色AppCompat 用 colorAccentMDC 已废弃改用 colorSecondary--itemnamecolorAccentcolor/colorAccent/item!--状态栏颜色API21可用--itemnameandroid:statusBarColor#00000000/item!-- 状态栏透明化设为 true 后 android:statusBarColor 失效内容延伸到状态栏下方二者二选一 --itemnameandroid:windowTranslucentStatustrue/item!-- 状态栏文字/图标颜色API23可用建议放在 values-v23/styles.xml 中 --itemnameandroid:windowLightStatusBartrue/item!-- 全屏显示隐藏状态栏 --itemnameandroid:windowFullscreentrue/item!-- 隐藏 TitleAppCompat/MDC 主题用无前缀的 windowNoTitle 系统主题如 android:style/Theme.Material.*要用 android:windowNoTitle。 更简单的方式是直接继承 NoActionBar 系列主题 --itemnamewindowNoTitletrue/item!-- 底部虚拟导航栏颜色API21可用 --itemnameandroid:navigationBarColor#E91E63/item!-- 让底部导航栏半透明并覆盖在 Activity 之上默认falseactivity会居于底部导航栏顶部如果设为truenavigationBarColor 失效 --itemnameandroid:windowTranslucentNavigationtrue/item!--窗口背景推荐只作用于 Activity 窗口不影响子 View --itemnameandroid:windowBackgrounddrawable/ic_launcher_background/item!-- 危险主题中的 android:background 会成为所有 View 的默认背景 覆盖 Button / EditText 等控件的默认样式。想设窗口背景请用上面的 windowBackground --!-- item nameandroid:background#a2a3e2/item --!-- 注意android:screenOrientation 不是主题属性写在主题里完全无效 必须写在 Manifest 中activity android:screenOrientationlandscape / --控件相关!-- button 文字是否全部大写MaterialComponents 的 Button 默认开启由 style 决定可用此属性关闭 --itemnameandroid:textAllCapsfalse/item!-- 主题中直接写 android:textColor 对普通 TextView 无效被控件默认 textAppearance 覆盖 要改默认文字颜色请用下面的 android:textColorPrimary --!-- item nameandroid:textColor#B0C4DE/item --!-- 默认 EditText 输入框字体的颜色 --itemnameandroid:editTextColor#E6E6FA/item!-- RadioButton、CheckBox 等控件禁用时的文字颜色 --itemnameandroid:textColorPrimaryDisableOnly#1C71A9/item!-- 应用的主要文字颜色ActionBar 标题文字默认使用该颜色 --itemnameandroid:textColorPrimary#FFFFFF/item!-- 辅助的文字颜色一般比textColorPrimary的颜色弱一点用于一些弱化的表示 --itemnameandroid:textColorSecondary#C1C1C1/item!-- 以下着色属性有两套前缀写错前缀不会生效 AppCompat / MaterialComponents 主题使用无前缀版本AppCompat 自己定义了同名属性 只有系统主题android:style/Theme.Material.*才使用 android: 前缀 --!-- 控件选中时的颜色默认取 colorAccent(AppCompat) / colorSecondary(MDC) --itemnamecolorControlActivated#FF7F50/item!-- 控件按压时的色调水波纹 --itemnamecolorControlHighlight#FF00FF/item!-- CheckBox、RadioButton、SwitchCompat 等默认状态的颜色 --itemnamecolorControlNormal#FFD700/item!-- 默认按钮的背景颜色 --itemnamecolorButtonNormal#1C71A9/item
企业数字化 ERP 产品动态
相关推荐
鸿泉跟随控制系统:商用车ACC?一文讲透原理、安装与避坑 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:04:21
Wokwi仿真STM32 FreeRTOS多传感器房间监测实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:04:21
DDR电路设计:时序、阻抗与电源协同的高速接口工程 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:04:21
ClickHouse高可用集群架构与部署实践 1. ClickHouse 高可用集群架构解析 在生产环境中,ClickHouse 的高可用性部署是保障业务连续性的关键。我们采用的这套双节点架构基于 ZooKeeper ReplicatedMergeTree 引擎,能够实现数据自动同步和故障自动转移。
1.1 核心组件作用分析 ZooKeeper 在这… · 2026/11/4 7:46:37
CLIP与BLIP多模态模型架构对比与实现解析 1. 项目概述在计算机视觉与自然语言处理的交叉领域,CLIP和BLIP这两个基于Transformer的模型正引领着多模态学习的新范式。作为一名长期跟踪多模态技术发展的从业者,我将在本文深入剖析这两个标志性模型的技术脉络。不同于简单的API调用教程,我… · 2026/11/4 7:46:37
C++ 反射机制详解及实例代码 前言
反射(reflection)指程序在运行时检查自身的类型、成员、函数,并据此创建对象或调用方法。Java、C# 有完整的反射;标准 C 至今没有。C 只有一套很有限的运行期类型信息(run-time type information, RTTI࿰… · 2026/11/4 7:46:37
BFS与DFS算法对比:图论问题的最优选择策略 1. 算法选择的核心逻辑 在解决图论问题时,我们常常面临BFS(广度优先搜索)和DFS(深度优先搜索)的选择困境。这两种基础算法看似简单,但在实际应用中却有着截然不同的表现。我通过多年算法竞赛和工程实践发现… · 2026/11/4 7:46:37
分布式系统中智能体工作空间隔离实践与优化 1. 项目背景与核心需求 在分布式计算和多智能体系统开发中,工作空间隔离一直是个棘手问题。最近我在开发OpenClaw多智能体协作平台时,遇到了一个典型场景:当多个智能体同时操作同一目录下的文件时,频繁出现文件锁冲突和临时文件互… · 2026/11/4 7:46:37
Pytest Fixture循环限制解析与参数化测试实践 1. 问题背景与现象解析在pytest测试框架中,fixture是用于提供测试依赖的核心机制。最近社区中一个引发热议的现象是:当开发者尝试在fixture内部使用for循环来动态生成多个测试用例时,pytest会抛出明确禁止的异常。这个设计决策看似反直觉&… · 2026/11/4 7:45:37
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38