Android 系统样式中的颜色属性

推荐阅读看完后彻底搞清楚Android中的 Attr 、 Style 、Theme

几个常用的颜色属性

先放上一张经典的图片,图片来自网络。

这张图在网上很是流传,也不知道当初是哪位大神标注的,很好的说明了 Android 系统中的几个常用的颜色属性的作用范围。

在开发者官网 R.attr 中给我们列出了所有的系统属性,我们可以在这里面找到对应的颜色属性所代表的意思。

通常我们新建一个项目的时候在 res/values/styles.xml 中会有下面的定义 Application 的主题样式。

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

其实样式远远不止如此,在 Android 5.0 开始 Android 系统引入了 Material Design 风格,各个控件在这样主题下面,风格有很大的变化。为了在不同版本的系统中统一 UI 样式,设置自定义的 Theme 继承自 Theme.AppCompat 系列就可以了。

关于 AppCompat 相关主题提供的系统属性,可以参考源码:https://android.googlesource.com/platform/frameworks/support/+/400d2df7dfb0f72117b84854035829b6eaaf3150/v7/appcompat/res/values-v21/themes_base.xml

同时由于部分属性的版本兼容问题,为了避免添加多个版本的 styles 文件,可以省略 android: 命名空间

colorPrimary

App Bar 的背景颜色,也是一个 APP 的主色调。不过 ActionBar 已经不鼓励使用了,由 Toolbar 来代替,需要给 Toolbar 来设置背景颜色。

<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary" />

colorPrimaryDark

status bar(状态栏)的背景色,仅适用于 Android 5.0及其以上版本。也就是在这个版本你直接可以通过修改这个属性来修改状态栏的颜色。

colorAccent

许多控件在选中状态或者获取到焦点的时候会使用这个颜色,比如:

  • CheckBox:checked 状态
  • RadioButton:checked 状态
  • SwitchCompat:checked 状态
  • EditText:获取焦点的时候的下划线和光标颜色
  • TextInputLayout:悬浮 label 字体颜色
  • 等等

android:navigationBarColor

navigation bar 的背景色,仅用于 Android 5.0及其以上

colorControlNormal

某些 View 处于普通状态下的颜色。

比如:

  • 没有被选中的 CheckBox 或者没有被选中的 RadioButton

  • 失去焦点时的 EditText ,Toolbar 溢出按钮颜色

  • 等等

colorControlActivated

在某些时候 colorControlActivatedcolorAccent 的替代品。这种情况下 colorControlActivate 的颜色是会覆盖 colorAccent 的颜色的。也就是说,如果你没有设置的话默认的颜色就是 colorAccent 的颜色

比如:

  • CheckBox 和 RadioButton 的 checked 状态

colorControlHightlight

所有可点击 View 触摸状态下的 Ripple 效果。仅对 Android 5.0 及其以上有效

colorButtonNormal

Button normal 状态下的背景色。

这种设置和 Button 的 android:background 所不同的是,在 Android5.0 或者更高的版本上使用 colorButtonNormal 的时候会依然保持阴影和 Ripple 触摸效果

android:windowBackground

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

android:textColorPrimary

APP 的主要文字颜色,比如 actionbar

文本的颜色,比如 Button 中的文本颜色,EditText 中的文本颜色,AlertDialog 中的文本颜色。但是不包括 TextView 中的文字颜色,TextView 中的文字颜色还需要 TextColor 来控制。

当然在设置了 TextColor 的话,TextColor 优先。

editTextColor:

默认 EditView 输入框字体颜色

TextColor

TextView 的文字颜色

更多查看这里

样式介绍

从 Android 5.0 开始,Android 系统引入了 Material Design风格。

md 的主题有:

  • @android:style/Theme.Material(暗主题)
  • @android:style/Theme.Material.Light(亮主题)
  • @android:style/Theme.Material.Light.DarkActionBar

当然了为了兼容性,我们一般使用j兼容包里面的 Them.AppCompat 主题

与之对应的样式主要有 Them.AppCompatThemeOverlay.AppCompat ,当然他们两个又有各自的子类。

这两种样式也有不同的使用方法

Theme.AppCompat 一般用于设置整个应用程序的全局主题

ThemeOverlay.AppCompat 用于覆盖特定视图的主题,覆盖相关的属性使他们成为亮或者暗 尤其是在 Toolbar 中运用。

这样说可以不太容易明白,下面通过一个例子来说明。

比如说先我的整个 APP 的主题是这样的

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

默认的文字的颜色是黑的的,那么显示效果就会是这样的

这里使用了一个 Titlbar 这样效果和整体很不搭配,我们需要的是 Titlbar 的背景使用我们的 colorPrimary 字体的颜色使用 浅色文本样式 的颜色,那么这样我们就可以自己定义一个样式

    <style name="sencond" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@color/colorPrimary</item>
</style>

    <androidx.appcompat.widget.Toolbar
android:theme="@style/sencond"
app:title="@string/app_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

然后把这个样式给 Titlbar设置上,这样效果就合适了。

当然你自己完全可以用属性来自己完成。

这是 ThemOverlay 样式的全部样式了,每个样式里面的内容都很简单。就是修改一些最基本的属性,不像 Theme 一样里面有那么多的内容。

参考:https://juejin.im/post/58f8b651b123db006238dd8d

这些Android系统样式中的颜色属性你知道吗?的更多相关文章

  1. CSS覆盖公共样式中的某个属性

    CSS如何覆盖公共样式中的某个属性?利用CSS样式的优先级. 如下例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

  2. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  3. 针对firefox ie6 ie7 ie8的css样式中的line-height属性

    针对firefox ie6 ie7 ie8的css样式中的line-height属性 以前我们大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7以上对! ...

  4. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  5. 浅谈Android系统开发中LOG的使用【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以 ...

  6. 在android系统调试中使用tinyalsa命令【转】

    本文转载自:http://blog.csdn.net/tangdexi112/article/details/17579021 我们在进行音频调试的时候,需要使用tinymix.tinyplay.ti ...

  7. Notepad++中的颜色属性大全

    Indent guideline style  缩进参考线的颜色 Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的()) Bad brace c ...

  8. Android系统更改状态栏字体颜色

    随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面.我们可以进行更多的定制化了,然而有的时候我们使用的是 ...

  9. Notepad++中的颜色属性设置大全

    Indent guideline style  缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的())Bad brace col ...

随机推荐

  1. C# HttpClient以multipart/form-data形式 提交文件和其它参数

    调用文件接口,需要一个上传文件和一个Region参数,参考调用实例 public async Task<WebApiResult> UploadFile(UploadFileModel i ...

  2. super performSelector: 解决调用父类私有方法的问题

    super performSelector: 解决objc调用父类私有方法的问题 Objc中[super performSelector: ...]并不会像其他语言一样能良好的工作.super只是编译 ...

  3. SpringCloud之Spring Cloud Stream:消息驱动

    Spring Cloud Stream 是一个构建消息驱动微服务的框架,该框架在Spring Boot的基础上整合了Spring Integrationg来连接消息代理中间件(RabbitMQ, Ka ...

  4. Vue之循环遍历Json数据,填充Table表格

    简单记一次Vue循环遍历Json数据,然后填充到Table表格中,展示到前端的代码: async getData(id) { const res = await this.$store.api.new ...

  5. 计算几何 val.1

    目录 计算几何 val.1 向量的点积 向量的叉积 一种奇怪的三角剖分求面积 凸包 点绕点旋转 后记 计算几何 val.1 本文并不是入门文章,供有高中数学基础的阅读 主要写一些重要的点和注意事项吧 ...

  6. 拉丁方阵问题 -- python实现

    问题描述 拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,而且每种元素在一行和一列中 恰好出现一次.著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此 ...

  7. JS---DOM---自定义属性引入和移除

    总结:在html标签中添加的自定义属性, 如果想要获取这个属性的值, 需要使用getAttribute("自定义属性的名字")才能获取这个属性的值 html标签中有没有什么自带的属 ...

  8. Pluralsight 科技公司公布自己的avaScript 成为最受欢迎的开发技术

    根据 SDTimes 报道,Pluralsight 科技公司公布自己的 Technology Index,JavaScript 位居榜首. Pluralsight,是美国的一家面向软件开发者的在线教育 ...

  9. mongodb使用_遍历列表中的元素,作为变量,循环修改mongodb中的字段

    一.问题描述: 需要将工作界面上的一些已经离职的用户状态改为失效,并备注为离职 二.需要准备/拿到手的工具/条件/数据: 1.已离职人员名单(excel格式) 2.任意mongodb工具(笔者使用的是 ...

  10. dependencyManagement

    maven中的继承是在子类工程中加入父类的groupId,artifactId,version并用parent标签囊括 depenentManagement标签作用: 当父类的pom.xml中没有de ...