Android——Theme和Style-由浅入深,全面讲解

article/2025/8/22 5:15:03

1、官方详细解读

样式和主题背景  |  Android 开发者  |  Android Developers

2、应用场景

类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。

样式style :应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性

主题theme: 虽然他可以像style一样应用于某个view,但规范使用的话还是在整个app、 单独的activity 、某个视图层次结构layout

3、声明位置

样式style和主题theme在 res/values/ 中的样式资源文件中声明,该文件通常命名为 styles.xml。当然我们可以根据功能使用不同,多创建几个styles.xml。比如themes.xml,app_style.xml

4、使用区别

4.1 theme使用通常Android 资源分配语义名称

主题背景定义具名资源的集合,可由样式、布局、微件等引用。主题背景为 Android 资源分配语义名称,例如 colorPrimary

4.2 theme和style结合使用(推荐)

样式和主题背景应当配合使用。例如,您可以用一个样式指定按钮的一部分应为 colorPrimary 颜色,另一个部分应为 colorSecondary 颜色,而这些颜色的实际定义则在主题背景中提供。当设备进入夜间模式时,您的应用可以从“浅色”主题背景切换为“深色”主题背景,从而更改所有这些资源名称的值。您无需更改样式,因为样式使用的是语义名称而非具体的颜色定义。

4.3 样式style详细使用

4.3.1 样式style使用

  • 1. 应用于独立view上 

style属性

<TextViewstyle="@style/GreenText"... />
  • 2. 应用于view及其所有子view上

 android:theme 

不过,您通常不会将样式应用于单个视图,而是会将样式作为主题应用于整个应用、Activity 或视图集合。

4.3.2 扩展和自定义样式style

  • 低级扩展方式

为保持与平台界面样式的兼容性,您应始终通过扩展框架或支持库中的现有样式来创建自己的样式。如需扩展样式,请使用 parent 属性指定要扩展的样式。然后,您可以替换继承的样式属性并添加新属性

例如

<style name="GreenText" parent="@android:style/TextAppearance"><item name="android:textColor">#00FF00</item>
</style>
  • 推荐扩展方式

当然上述做法其实并不规范,官方建议我们直接继承 支持库中的样式(已定义好相关的style)。

不过,您应始终继承 Android 支持库中的核心应用样式。为与 Android 4.0(API 级别 14)及更高版本兼容,支持库中的样式会针对各版本中可用的界面属性进行优化。支持库中的样式通常与平台中的样式具有相似的名称,但包含 AppCompat

如需从库或您自己的项目继承样式,请声明父样式名称,但不要包含以上示例中所示的 @android:style/ 部分。例如,以下示例继承了支持库中的文本外观样式:

<style name="GreenText" parent="TextAppearance.AppCompat"><item name="android:textColor">#00FF00</item>
</style>

如果跟进下代码,会发现 父TextAppearance.AppCompat 中已经引用了 @android:style/TextAppearance

 

 

  •  进阶扩展方式(点分表示法)

 可以参考官方 支持库中命名方式就是这样的

您也可以使用点分表示法(而非 parent 属性)来扩展样式名称,从而继承样式(平台中的样式除外)。也就是说,将您想继承的样式的名称附加在您的样式的名称前面并用句点分隔。这种方式通常仅适合用来扩展您自己的样式,而不适合用来扩展其他库中的样式。例如,以下样式从上面的 GreenText 样式继承了所有样式,然后增加了文本大小:

<style name="GreenText.Large"><item name="android:textSize">22dp</item>
</style>

4.3.3 样式style优先级顺序

Android 提供了多种在整个 Android 应用中设置属性的方法。例如,您可以直接在布局中设置属性,将样式应用到视图,将主题背景应用到布局,以及以编程方式设置属性。

在选择如何为应用设置样式时,需考虑 Android 的样式层次结构。一般来说,您应当尽量使用主题背景和样式,以保持一致性。如果您在多个位置指定了相同的属性,下面的列表将决定最终应用哪些属性。该列表按照优先级从高到低的顺序排序:

  1. 通过文本 span 将字符或段落级样式应用到 TextView 派生的类
  2. 以编程方式应用属性
  3. 将单独的属性直接应用到 View
  4. 将样式应用到 View
  5. 默认样式
  6. 将主题背景应用到 View 集合、Activity 或整个应用
  7. 应用某些特定于 View 的样式,例如为 TextView 设置 TextAppearance

4.4 主题theme详细使用

4.4.1 主题颜色详解

<style name="Base.Theme.GTD34GoldCoinAndroidProject" parent="Theme.Material3.Light.NoActionBar"><!-- Primary brand color. --><!-- 软件标题颜色 --><!--主色 应该是应用中出现最频繁的颜色--><item name="colorPrimary">@color/colorPrimary</item><!-- 主色对应深色主题 --><item name="colorPrimaryDark">@color/colorPrimaryDark</item><!-- 辅助色 --><item name="colorAccent">@color/colorPrimaryLight</item><!-- Status bar color. --><item name="android:statusBarColor">?attr/colorPrimary</item><!-- Customize your theme here. --><!-- The color applied to framework controls in their normal state. 控件正常状态颜色--><item name="colorControlNormal">@color/colorSecondaryGray2</item><!-- The color applied to framework controls in their activated (ex. checked) state.控件选中状态颜色 --><item name="colorControlActivated">@color/colorSecondaryPurple</item><!-- The color applied to framework control highlights (ex. ripples, list selectors). 控件高亮显示的颜色 --><item name="colorControlHighlight">@color/colorPrimaryLight</item><!-- The color applied to framework buttons in their normal state. 按钮正常状态颜色 --><item name="colorButtonNormal">@color/colorPrimary</item><!-- The color applied to framework switch thumbs in their normal state. 开关控件颜色 --><item name="colorSwitchThumbNormal">@color/colorPrimary</item><!-- The background used by framework controls.  控件背景色 --><item name="controlBackground">@color/colorPrimary</item><!-- Default color of background imagery for floating components, ex. dialogs, popups, and cards. 浮动组件(例如对话框、弹出窗口和卡片)的默认背景图像颜色 --><item name="colorBackgroundFloating">@color/colorSecondaryGray</item></style><style name="AppThemeDemo" parent="Theme.AppCompat.Light.DarkActionBar"><!-- 应用的主要色调,actionBar默认使用该颜色,Toolbar导航栏的底色 --><item name="colorPrimary">@color/white</item><!-- 应用的主要暗色调,statusBarColor 默认使用该颜色 --><item name="colorPrimaryDark">@color/white</item><!-- 一般控件的选中效果默认采用该颜色,如 CheckBox,RadioButton,SwitchCompat,ProcessBar等--><item name="colorAccent">@color/colorAccent</item><!-- 状态栏、顶部导航栏 相关--><!-- status bar color --><item name="android:statusBarColor">#00000000</item><!-- activity 是否能在status bar 底部绘制 --><item name="android:windowOverscan">true</item><!-- 让status bar透明,相当于statusBarColor=transparent + windowOverscan=true --><item name="android:windowTranslucentStatus">true</item><!-- 改变status bar 文字颜色, true黑色, false白色,API23可用--><item name="android:windowLightStatusBar">true</item><!-- 全屏显示,隐藏状态栏、导航栏、底部导航栏 --><item name="android:windowFullscreen">true</item><!-- hide title bar --><item name="windowNoTitle">true</item><!-- 底部虚拟导航栏颜色 --><item name="android:navigationBarColor">#E91E63</item><!-- 让底部导航栏变半透明灰色,覆盖在Activity之上(默认false,activity会居于底部导航栏顶部),如果设为true,navigationBarColor 失效 --><item name="android:windowTranslucentNavigation">true</item><!-- WindowBackground,可以设置@drawable,颜色引用(@color),不能设置颜色值(#fffffff),Window区域说明:Window涵盖整个屏幕显示区域,包括StatusBar的区域。当windowOverscan=false时,window的区域比Activity多出StatusBar,当windowOverscan=true时,window区域与Activity相同--><item name="android:windowBackground">@drawable/ic_launcher_background</item><!--<item name="android:windowBackground">@color/light_purple</item>--><!-- 控件相关 --><!-- button 文字是否全部大写(系统默认开)--><item name="android:textAllCaps">false</item><!-- 默认 Button,TextView的文字颜色 --><item name="android:textColor">#B0C4DE</item><!-- 默认 EditView 输入框字体的颜色 --><item name="android:editTextColor">#E6E6FA</item><!-- RadioButton checkbox等控件的文字 --><item name="android:textColorPrimaryDisableOnly">#1C71A9</item><!-- 应用的主要文字颜色,actionBar的标题文字默认使用该颜色 --><item name="android:textColorPrimary">#FFFFFF</item><!-- 辅助的文字颜色,一般比textColorPrimary的颜色弱一点,用于一些弱化的表示 --><item name="android:textColorSecondary">#C1C1C1</item><!-- 控件选中时的颜色,默认使用colorAccent --><item name="android:colorControlActivated">#FF7F50</item><!-- 控件按压时的色调--><item name="android:colorControlHighlight">#FF00FF</item><!-- CheckBox,RadioButton,SwitchCompat等默认状态的颜色 --><item name="android:colorControlNormal">#FFD700</item><!-- 默认按钮的背景颜色 --><item name="android:colorButtonNormal">#1C71A9</item><!-- 【无效】 在theme中设置Activity的属性无效, 请到AndroidManifest中Activity标签下设置 --><item name="android:launchMode">singleTop</item><item name="android:screenOrientation">landscape</item></style>
  • 1. colorPrimary

App Bar 的背景色,即 ActionBar,通常也是一个 App 的主题色调。不过 ActionBar 已经退出历史舞台,由 Toolbar 代替使用,但是 Toolbar 需要在 layout 文件中单独使用 background 属性设置背景色

  • 2. colorPrimaryDark

status bar(状态栏)背景色。仅作用于 Lollipop 及更高版本。

  • 3. colorAccent

许多控件在选中状态或获取焦点状态下使用这个颜色,常见有:

CheckBox:checked 状态

RadioButton:checked 状态

SwitchCompat:checked 状态

EditText:获取焦点时的 underline 和 cursor 颜色

TextInputLayout:悬浮 label 字体颜色

  • 4 android:navigationBarColor

navigation bar 背景色。仅作用于 Lollipop 及更高版本。

  • 5 colorControlNormal

某些 Views “normal” 状态下的颜色,常见如:unselected CheckBox 和 RadioButton,失去焦点时的 EditText,Toolbar 溢出按钮颜色,等等。

  • 6 colorControlActivated

某种程度上,是 colorAccent 的替代者,比如对于 CheckBox 和 RadioButton 的 checked 状态,colorControlActivated 属性会覆盖 colorAccent 属性的对应颜色。

  • 7 colorControlHighlight

所有可点击 Views 触摸状态下的 Ripple(涟漪)效果。仅作用于 Lollipop 及更高版本。

  • 8 colorButtonNormal

Button normal 状态下的背景色。注意,这种设置与 Button 的 android:background 属性改变背景色不同的是,前者在 Lollipop 及更高版本上会让 Button 依旧保持阴影和 Ripple 触摸效果。

  • 9 android:windowBackground

窗口背景色,诸如此类的还有:android:background,android:colorBackground 等。

  • 10 android:textColorPrimary

EditText 的 text color,等等文本颜色。

  • 11 navigationIcon

定义toolbar上统一的返回按钮的图片

在Android界面上以上主题色对应使用位置下面两个图展示

4.4.2 theme主题大全

4.4.3 深入官方SDK不同版本查看主题定义明细

根据各自项目采用的SDK版本不同,主题可以也有不同之处。大概源码如下

 

 参考:Android Theme 属性详解 - 简书


http://chatgpt.dhexx.cn/article/SJ3KK0Rl.shtml

相关文章

关于eclipse IDE安装Darkest Dark Theme主题插件

听说Darkest Dark Theme是现在最受欢迎的eclipse主题插件&#xff0c;于是我也来搞了一下。 Darkest Dark Theme官方网站(打开慢的要死&#xff0c;不知道是不是只有我会有这个问题。) https://marketplace.eclipse.org/content/darkest-dark-theme安装教程&#xff1a; 1.打开…

Vue Theme主题样式整理

为什么80%的码农都做不了架构师&#xff1f;>>> 一、ElementUI官方主题在线生成预览 https://elementui.github.io/theme-chalk-preview/#/zh-CN 使用步骤&#xff1a; 1.选择主题颜色&#xff0c;下载主题 包&#xff0c;然后解压 2.找到node_modules下的element-u…

Android Theme 常见主题风格详解

本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题&#xff0c;现在分享出来希望对初学者有所帮助。 本文出自门心叼龙的博客&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/geduo_83/article/details/86560896 目录 1. 什么是Style&…

Android自带的Theme主题图解

一、Manifest文件中: 从上图中我们可以看到在这个应用程序中我们的主题应用的是 AppTheme ,然后我们去看看 AppTheme 。 二、style.xml文件中: 这个文件是在应用工程中的: 然后又可以发现 AppTheme 主题样式是继承自 AppBaseTheme 主题样式的, 而 AppBaseTheme 主题样式又…

OpenWRT LUCI Theme主题定制

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 我们在github上先找一个合适的主题 https://github.com/search?q=luci+theme 比如我们以 rosywrt/luci-theme-rosy 为例 第…

Android的Theme主题切换

简单的Theme换肤功能 效果截图 1、定义属性 先定义几个需要改变的属性&#xff0c;例如&#xff1a; <!--换肤--><attr name"userNameColor" format"color" /><attr name"commonColor" format"color" /><…

Eclipse设置Theme主题颜色

设置Eclipse的代码编辑区背景为暗黑色系&#xff1a; 如需转载&#xff0c;请注明转载自&#xff1a;blog.csdn.net/it1988888 相关文件下载&#xff1a;http://guari.github.io/eclipse-ui-theme/ 方案一--下载颜色主题配置文件&#xff0c;离线导入配色方案的设置&#xf…

Jupyter lab Theme 主题更换

Jupyter lab Theme 主题更换 1. 打开Jupyter-lab2. 再拓展插件中搜索 “theme”3. 安装自己喜欢的主题4. 在Setting->JupyterLab Theme->选择"自己刚安装的主题"jupyterlab_miami_nights 主题jupyterlab_onedarkpro 主题 1. 打开Jupyter-lab 2. 再拓展插件中搜…

PySimpleGui theme主题使用

第一章 PySimpleGui theme主题使用 目录 系列文章目录 前言 一、theme是什么&#xff1f; 二、使用步骤 1.打印所有主题&#xff1a; 2.主题设置 3.更新主题的设置 总结 前言 通过设置主题&#xff0c;可快速设置GUI的颜色&#xff0c;节省自己设置UI的时间 一、theme是什么&a…

Hexo修改theme主题

学习目标 本文主要学习的内容如下&#xff1a; 如何去获取到 NexT 主题 如何去安装和配置 NexT 主题 设置菜单&#xff0c;如分类&#xff0c;标签&#xff0c;关于我等简单配置 获取开源的 Hexo 主题 在上节介绍如何快速去搭建 Hexo &#xff0c;最终展示的效果如下图所…

【Android开发基础】应用界面主题Theme使用方法

主题Theme就是用来设置界面UI风格&#xff0c;可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的Theme&#xff0c;可以按标题栏Title Bar和状态栏Status Bar是否可见来分类&#xff1a; •android:theme"android:style/Theme.Dialog" …

Flutter 基础之 Theme 主题(样式篇)

声明&#xff1a;本篇文章已授权微信公众号 YYGeeker 独家发布。 博主原创文章&#xff0c;转载请注明出处&#xff1a;小嵩的博客 一、介绍 Theme 类将主题应用于子控件&#xff0c;Theme&#xff08;主题&#xff09;它描述了应用程序的颜色和排版选择。Theme有两种&#x…

Android中Theme主题和Style样式使用介绍总结

1.Theme主题 1.1.Theme主题作用范围 Theme主要是针对应用级别的或者说窗体级别&#xff0c;可以设置应用主题&#xff08;应用换肤效果&#xff09;和Activity的主题&#xff1b;主题是不能应用在某一个单独的View中&#xff1b;或者说Theme是用来设置应用全局主题风格的&…

【转】提升工作效率的一些小技巧——资源管理器篇

当我看到有人打开资源管理器&#xff0c;一个一个文件夹点进去&#xff0c;再点出来&#xff0c;我就着急。特别是有人在会议上打开我的电脑&#xff0c;然后寻找文件&#xff0c;我就特别捉急&#xff0c;这不只是在浪费自己的时间&#xff0c;还浪费参加会议人的时间。 我把资…

WPF 4 开发Windows 7 任务栏(Overlay Icon、Thumbnail Toolbar、Progress Bar)

在上一篇我们介绍了如何在WPF 4 中开发Windows 7 跳转列表&#xff0c;本篇将继续针对WPF 4 中任务栏其他功能&#xff1a;覆盖图标&#xff08;Overlay Icon&#xff09;、进度条&#xff08;Progress Bar&#xff09;、缩略图工具栏&#xff08;Thumbnail Toolbar&#xff09…

HTML+CSS提升小实战

1 <html>2 <head>3 <meta http-equiv"Content-Type" content"text/html; charsetutf-8" />4 <title>几米简介</title>5 <style type"text/css">6 *{7 margin:0px;padding:0px;8 …

java实现qlearning,DQN(Deep Q-learning)入门教程(一)之强化学习介绍

什么是强化学习? 强化学习(Reinforcement learning,简称RL)是和监督学习,非监督学习并列的第三种机器学习方法,如下图示: 首先让我们举一个小时候的例子: 你现在在家,有两个动作选择:打游戏和读书。如果选择打游戏的话,你就跑到了网吧,选择读书的话,就坐在了书桌面前…

实验一 书桌

实验内容&#xff1a; 了解四种视图&#xff0c;在绘制时&#xff0c;从不同的视图进行观察&#xff0c;提高绘制效率。知道常用工具的快捷键 一、四种视图 1、顶视图&#xff08;T&#xff09; 2、前视图&#xff08;F&#xff09; 3、左视图&#xff08;L&#xff09; 4、透…

学计算机的桌面,三个软件,干净你的电脑桌面,让你更高效工作学习!

文 | 谦行公子 首发 | 谦行公子 今天向大家推荐三个软件&#xff0c;为了就是让大家都拥有一个干净整洁的桌面&#xff0c;从此高效地学习生活&#xff5e;至于哪三个&#xff0c;接着看 相信很多人都有这样的经历&#xff0c;连续工作好几天甚至好几周&#xff0c;桌面上堆满…

小Q书桌 - 最完美纯净的任务栏Bins

虽然&#xff0c;TX 在众多网友的 眼中 都是山寨的代名词&#xff0c;都曾经很BS之。 诚然&#xff0c;鄙人也是对其某些作品不太满意。 但是&#xff0c;TX 仍有那么一些人再默默坚持着&#xff0c;给我们纯净的软件&#xff0c;纯净的视觉盛宴。 ……………………………………