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

article/2025/8/22 7:56:02

1.Theme主题

1.1.Theme主题作用范围

Theme主要是针对应用级别的或者说窗体级别,可以设置应用主题(应用换肤效果)和Activity的主题;主题是不能应用在某一个单独的View中;或者说Theme是用来设置应用全局主题风格的,对整个应用或某个Activity存在影响。

1.2.Theme主题的定义

在AS中res/values/style.xml中定义,例如新建项目AS自动创建的Theme,是系统提供;


<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
      <!-- Customize your theme here. -->
      <item name="colorPrimary">@color/colorPrimary</item>
      <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
      <item name="colorAccent">@color/colorAccent</item>
</style>

Android系统提供的主题在:..\platforms\android-29\data\res\values

常见的系统主题:

android:theme="@android:style/Theme.Dialog"   将一个Activity显示为能话框模式  

android:theme="@android:style/Theme.NoTitleBar"  不显示应用程序标题栏  

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"  不显示应用程序标题栏,并全屏

android:theme="Theme.Light"  背景为白色  

android:theme="Theme.Light.NoTitleBar"  白色背景并无标题栏  

android:theme="Theme.Light.NoTitleBar.Fullscreen"  白色背景,无标题栏,全屏

android:theme="Theme.Black"  背景黑色  

android:theme="Theme.Black.NoTitleBar"  黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen"    黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper"  用系统桌面为应用程序背景  

android:theme="Theme.Wallpaper.NoTitleBar"  用系统桌面为应用程序背景,且无标题栏  

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen"  用系统桌面为应用程序背景,无标题栏,全屏  

android:theme="Translucent"  半透明  

android:theme="Theme.Translucent.NoTitleBar" 半透明、无标题栏  

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 半透明、无标题栏、全屏  

android:theme=”Theme.Panel” 半透明,无标题,全屏

android:theme=”Theme.Light.Panel”平板风格显示

常见主题集合中的item属性

<!-- 应用的主要色调,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.3.Theme主题的使用

在AndroidManifest.xml为应用或者Activity设置theme,通过android:theme = "@style/theme主题名"来引入自己的主题;


<application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.Launcher"> //自定义的Theme
</application>

在Java代码中设置theme,注意在Activity的onCreate方法中的setContentView(R.layout.activity_main)之前设置;

setTheme(R.style.AppTheme);

自定义属性 res/values/attrs.xml(通过:定义 赋值  使用)

1.4.系统Theme

系统Theme路径:SDK路径\platforms\android-26\data\res\values\themes.xml

2.style样式

2.1.style样式的使用范围

style样式是针对窗体元素级别的或者说View级别的,改变指定控件或者Layout的样式;

2.2.style作用

抽取一些共同的属性定义到style中,可以省略重复的属性代码。

2.3.定义

res/values/style.xml中新建<style>标签,为此标签设置name属性,如下:

<style name="myButtonStyle">
        <item name="android:height">?attr/myHeight</item>
        <item name="android:textColor">#0ff0f0</item>      <!--字体颜色-->
        <item name="android:textSize">15sp</item>          <!--字体大小-->
        <item name="android:layout_height">200dp</item>     <!--控件高度-->
        <item name="android:layout_width">match_parent</item>  <!--控件宽度-->
        <item name="android:background">#ff0000</item>         <!--背景色-->
    </style>

2.4.使用

在xml布局文件中


<Buttonandroid:id="@+id/btn_style_test"style="@style/myButtonStyle"/>

2.5.系统Style

SDK路径\platforms\android-26\data\res\values\styles.xml

3.区别

从Theme和style的作用范围可以看出他们的区别;如果一个应用使用了theme,同时应用下的view也使用了style,那么当theme与样式style发生冲突时,style有效,因为style的优先级高于theme;在R.attr定义中以window开头的一些属性只对theme有效。

4.相同点

两者的定义相同、继承方式也相同,都是在res/values/style.xml中定义;继承方式:. 继承(只能继承自定义)和parent继承;

5.相关

@符号:表明我们应用的资源是已经定义过并存在的,可以直接引用。
 ? 符号:表明我们引用的资源的值在当前的主题当中定义过。


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

相关文章

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

当我看到有人打开资源管理器&#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;纯净的视觉盛宴。 ……………………………………

【电脑管家之小Q书桌】

前言&#xff1a; 生活之中处处有知识&#xff0c;前几天&#xff0c;自己电脑无意间弹出了广告&#xff0c;心想&#xff0c;难道是最近重装了系统&#xff0c;电脑管家防广告功能关闭了&#xff0c;于是就去看了电脑管家&#xff0c;一切设置好后&#xff0c;一个好奇心又引导…

小Q书桌的下载、安装和使用

最近&#xff0c;无意之间&#xff0c;在某大牛电脑里&#xff0c;使用到了这款软件。感谢&#xff01; 确实&#xff0c;挺实用和方便的&#xff0c;强烈推荐&#xff01;&#xff01;&#xff01; 1、 下载 http://qdesk.qq.com/ 2、 安装 3、 使用 多么方便啊&#xff01…

腾讯小Q书桌图标怎么实现的啊?

Win7&#xff1a; 红色区域&#xff1a;类名是Shell_TrayWnd的容器 黄色区域&#xff1a;类名是ReBarWindow32的二级容器 绿色区域&#xff1a;类名是MSTaskSwWClass的窗口 WinXP&#xff1a; 红色区域&#xff1a;红色区域——类名是Shell_TrayWnd的容器…

小Q书桌支持WIN10完美运行 关于win10不兼容小q书桌

原文出处: https://zhuanlan.zhihu.com/p/62378877 背景&#xff1a; 小Q书桌是一款简洁易用的桌面图标管理工具&#xff0c;几年前就开始使用。 由于win10的普及&#xff0c;目前更换为win10系统&#xff0c;但由于小Q书桌已经很多年没更新&#xff0c;导致出现以下兼容问题&a…

小i机器人伴侣_【数据分析】2020年3月全国工业机器人产量统计数据分析

前 言 据中商产业研究院数据库显示&#xff0c;2020年1季度全国工业机器人产量波动幅度较小&#xff0c;2020年3月全国工业机器人产量为17241套&#xff0c;同比增长12.9%。2020年1季度全国工业机器人产量为34645.3套&#xff0c;同比下降8.2%。 数据来源&#xff1a;中商产业…

一个眼神 比亚迪车载机器人为你点歌

无论是通过触摸屏还是语音控制&#xff0c;车载系统的目的都是为了提供更多驾驶乐趣。在北京车展上&#xff0c;比亚迪推出“秦”电动车&#xff0c;其仪表台上配备的“i”机器人可通过表情、动作和语音和驾驶者互动&#xff0c;提供多种服务。 这个小机器人采用了一个微笑的卡…

聊天机器人的“高情商”炼成术

聊天机器人&#xff0c;是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上&#xff0c;如PC平台或者移动终端设备平台&#xff0c;而类人的硬件机械体则不是必需的承载设备。 聊天机器人的研究源于图灵(Alan M. Turing)在1950年《Mind》上发表的文章《Com…

中国机器人市场增速震惊全世界!这6大机器人你听过几个?

人工智能的火爆&#xff0c;让机器人创业的浪潮广泛引起了企业的关注&#xff0c;很多企业选择了或投资或自己研发的方式加入这场狂欢&#xff0c;这对于行业整体的发展来说是良性的&#xff0c;各大企业的加入&#xff0c;它们丰富的资源可以推动机器人行业的快速发展。 那么&…

机器人跟踪_使用手机和机器学习跟踪睡眠

机器人跟踪 The code project can be found on https://github.com/josephbima/sleep-tracker 该代码项目可在https://github.com/josephbima/sleep-tracker上找到 I’ve always wondered the exact time I actually spend sleeping at night. So when I needed ideas for the …

活动 | 腾讯×Nature Research:提问AI与机器人的未来

「 42. 」 这是科幻小说《银河系漫游指南》中智能计算机「Deep Thought&#xff08;深思&#xff09;」经过750万年运算&#xff0c;找到的「关于生命&#xff0c;宇宙及一切问题的终极答案」。 为什么是42&#xff1f;「深思」把这个问题交给了一台更高智能的电脑——地球来回…

机器人影视对接_机器学习对接会

机器人影视对接 A simple question like ‘How do you find a compatible partner?’ is what pushed me to try to do this project in order to find a compatible partner for any person in a population, and the motive behind this blog post is to explain my approac…

【AI视野·今日Robot 机器人论文速览 第十六期】Tue, 29 Jun 2021

AI视野今日CS.Robotics 机器人学论文速览 Tue, 29 Jun 2021 Totally 28 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers If you trust me, I will trust you: the role of reciprocity in human-robot trust Authors Joshua Zonca, Anna Folso, Ale…

[Linux]基于网络编程的智能机器小伴侣

目录 1 项目描述2 项目需求3 搭建环境4 技术描述5 概要设计6 GIF表情切换7 机器人智能回答8 城市天气查询9 在线播放音乐10 播放网站视频11 查看网页照片12 项目总结 1 项目描述 本次项目是基于Linux环境的交叉编译arm-linux-gcc&#xff0c;在GEC6818arm开发板上运行&#xf…