Android系统自带Theme

简介

  • Android系统在4.0之前没有设计可言,打开APP就是黑乎乎一片,这是最原始的Theme主题
  • 在Android4.0有了Holo主题,Holo本身继承于Theme主题,而Holo.NoActionBar ,Holo.Dialog,Holo.Light这些都是衍生自Holo主题
  • 在Android5.0有了Material主题,俗称材料主题,也是继承于Theme主题

Theme源码简析

以Android6.0为例,查看系统源码这个位置  :frameworks/base/core/res/res/value/,发现有如下几个Theme文件。

截取部分theme.xml:

<style name="Theme"><item name="isLightTheme">false</item><item name="colorForeground">@color/bright_foreground_dark</item><item name="colorForegroundInverse">@color/bright_foreground_dark_inverse</item><item name="colorBackground">@color/background_dark</item><item name="colorBackgroundFloating">?attr/colorBackground</item><item name="colorBackgroundCacheHint">?attr/colorBackground</item>
复制代码

截取部分theme_metarial.xml

<style name="Theme.Material"><item name="colorForeground">@color/foreground_material_dark</item><item name="colorForegroundInverse">@color/foreground_material_light</item><item name="colorBackground">@color/background_material_dark</item><item name="colorBackgroundFloating">@color/background_floating_material_dark</item><item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_dark</item><item name="disabledAlpha">@dimen/disabled_alpha_material_dark</item><item name="backgroundDimAmount">0.6</item>
复制代码
  • themes.xml:低版本的主题,目标API level一般为10或以下
  • themes_holo.xml:从API level 11添加的主题
  • themes_device_defaults.xml:从API level 14添加的主题
  • themes_material.xml:从API level 21添加的主题
  • themes_micro.xml:用于Android Wear的主题
  • themes_leanback.xml:用于Android TV的主题

常见Theme效果比较

下面直观感受下各种Theme的区别

  • 测试设备:一加3T  系统版本:7.0

  • 测试APP:一个Activity放一个Button,点击出现AlertDialog

  • android:Theme

- android:Theme.Holo.Light

- android:Theme.DeviceDefault.Light

- android:Theme.Material.Light

如果把主题设为Theme.Material,然后minsdkVersion改为19,安装到Android4.4的设备会是什么效果

  • 测试设备:Htc one  系统版本:android 4.4

可以看出Material在Android4.4系统上无法使用,而是自动替换成为Holo主题,那么怎么在Android5.0之前的设备使用Material主题呢?

兼容包AppCompat

appcompat-v7是v7-support库下面一个子库,此库主要是对ActiinBar支持,还包含对 Material Design 用户界面实现的支持。

  • 在build.gradle添加compile 'com.android.support:appcompat-v7:23.2.1'
  • 修改主题为Theme.AppCompat.Light
  • 修改Activity为AppCompatActivty
  • 测试设备: htc one 系统版本:4.4
  • 可以看出在4.4的设备使用appcompat-v7这个兼容包,也实现了类似Material的主题风格,但是仔细对比下这个Dialog明显还是Holo风格的。就是说appcompat-v7只是在对Activity主界面风格进行了Material化,而一些控件并没有变化。
  • 要想使我们的app(不管运行在5.0之前还是5.0以后)拥有Material的精髓,包括所有Material控件,动画,还得使用另一个兼容包Android Design Support Library 使用方法:在build.gradle配置 compile 'com.android.support:design:23.2.0' ,这个库依赖于Support v4 和AppCompat Support,添加了这个库就默认实现了这两个库。

下一篇:介绍Material中控件,动画的使用

Android样式和主题(二):系统有哪些主题相关推荐

  1. Android 11.0 系统禁用深色主题背景功能

    1.前言 在11.0的系统rom定制化开发中,在11.0的原生系统中,默认有正常背景和深色主题背景,当系统设置深色主题背景或者进入省电模式情况下会进入 深色主题背景模式这样就会导致系统页面都是黑色的显 ...

  2. android 系统自带主题样式及自定义主题样式

    From: http://blog.csdn.net/dawanganban/article/details/17732701 http://www.cnblogs.com/bluestorm/arc ...

  3. Android 样式系统 | 常见的主题背景属性

    在前一篇 Android 样式系统文章中,我们介绍了主题背景与样式的区别,以及如何编写灵活的样式与布局代码用于抽离可变化部分. 我们建议使用主题背景属性来间接引用资源,您可以在不同的模式下 (比如在深 ...

  4. android 系统自带主题和样式

    android中自带的主题(theme)的集锦: •android:theme="@android:style/Theme.Dialog"   将一个Activity显示为对话框模 ...

  5. Android样式和主题背景

    简介: 本文将简单介绍Android样式与主题背景的相关内容 文章目录 前言 一.样式 二.主题背景 三.样式层次结构 四.创建并应用样式 五.自定义默认主题 六.添加特定于版本的样式 七.常见的主题 ...

  6. Android样式和主题背景·

    简介: 本文将简单介绍Android样式与主题背景的相关内容 文章目录 前言 一.样式 二.主题背景 三.样式层次结构 四.创建并应用样式 五.自定义默认主题 六.添加特定于版本的样式 七.常见的主题 ...

  7. Android 系统提供的主题

    android.R.style 列举了系统提供的样式主题. 在 xml 文件中,作为属性值使用时,需要将主题名称中的 "_"(短横)改为 .(点). Theme The defau ...

  8. android SystemUI S新功能--- 系统主题随壁纸变化

    android SystemUI S新功能- 系统主题随壁纸变化 在android S 上 系统有一个新功能,就是系统的主题颜色,可以随壁纸的变化而变化, 具体代码在:

  9. ​Android - 样式和主题

    style 样式资源定义了 UI 的格式和外观. 样式可以应用于单个视图(从布局文件中)或整个 Activity 或应用程序(从清单文件中). 定义样式 样式在与指定布局的 XML 不同的 XML 资 ...

  10. android样式和主题

    样式(Style)是用来指定View或者window的外观和格式的一组属性集合.可以用来指定高度.内边距.字体颜色.字体大小.背景颜色等属性.样式定义在独立于布局文件的XML文件中.保证了内容和设计的 ...

最新文章

  1. java面向_java是面向什么的语言?
  2. 指纹识别开源竞赛启动,5000张指纹图像匹配
  3. linux命令行模式下实现代理上网 专题
  4. 一键 caddy php h5ai_H5ai 在线播放搭建
  5. 【人脸表情识别】基于matlab LBP+LPQ算法融合人脸表情识别【含Matlab源码 432期】
  6. 经典算法题目及思路解法总结
  7. linux终端怎么设置monaco,ubuntu16.04安装monaco字体
  8. html 语音识别输入法,9种外语语音识别 搜狗输入法成国内支持语种最多输入法...
  9. 不用U盘,给自己的电脑重装一个win10系统
  10. 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
  11. Tomcat启动,提示 The JRE_HOME environment variable is not defined correctly 问题。
  12. 用极大似然法估计因子载荷矩阵_[转载]第三十六课         因子分析
  13. 示例程序:关于双目视觉,标定,立体匹配(视差算法),点云,双目三维重建的原理以及代码
  14. ChatGPT在智能客服产品落地探讨
  15. C语言无符号有符号比较问题总结
  16. 【计算机视觉40例】案例36:调用CNN实现人脸检测
  17. el-table的自定义行高设置
  18. MATLAB科学计算机lnx代码,[2018年最新整理]Matlab科学计算.ppt
  19. 201571030130/201571030124《小学四则运算练习软件需求说明》结对项目报告
  20. Echarts中太阳图(Sunburst)的实例

热门文章

  1. Linux 备份及恢复 Linux 文件权限
  2. Java学习笔记(二)--Java开发环境
  3. android 验证输入,最佳实践:输入验证(Android)
  4. linux安装mysql8.0.18_Linux安装MySQL8.0
  5. Halcon算子知识:optical_flow_mg
  6. 2021-01-07 matlab数值分析 线性代数的直接接法  追赶法
  7. 2020-12-03 python 字典 key 和value 互换
  8. 奇迹暖暖登录一直显示服务器满,奇迹暖暖无法登录解决办法
  9. java comet_用java实现comet,基于 HTTP长连接的实现,用于从服务端实时发送信息到客户端...
  10. linux开发板蓝牙连接,开发板蓝牙通信问题,有这方面经验的请进