首先看一下theme中的设置,代码如下

<?xml version="1.0" encoding="utf-8"?>
<resources> <style name="Theme.Funui" parent="Theme.Holo.Light">
<item name="isFunui">true</item>
<item name="colorForeground">@android:color/bright_foreground_funui</item>
<item name="colorForegroundInverse">@android:color/bright_foreground_funui_inverse</item>
<item name="colorBackground">@android:color/background_funui</item>
<item name="colorBackgroundCacheHint">@android:drawable/background_cache_hint_selector_funui</item>
<item name="disabledAlpha">0.5</item>
<item name="backgroundDimAmount">0.6</item> <item name="colorPressedHighlight">@color/funui_gray_light</item>
<item name="colorLongPressedHighlight">@color/funui_gray_bright</item>
<item name="colorFocusedHighlight">@color/funui_blue_dark</item>
<item name="colorMultiSelectHighlight">@color/funui_green_light</item>
<item name="colorActivatedHighlight">@color/funui_blue_dark</item> <!-- Text styles -->
<item name="textAppearance">@android:style/TextAppearance.Funui</item>
<item name="textAppearanceInverse">@android:style/TextAppearance.Funui.Inverse</item> <item name="textColorPrimary">@android:color/primary_text_funui</item>
<item name="textColorSecondary">@android:color/secondary_text_funui</item>
<item name="textColorTertiary">@android:color/tertiary_text_funui</item>
<item name="textColorPrimaryInverse">@android:color/primary_text_funui_inverse</item>
<item name="textColorSecondaryInverse">@android:color/secondary_text_funui_inverse</item>
<item name="textColorTertiaryInverse">@android:color/tertiary_text_funui_inverse</item>
<item name="textColorPrimaryDisableOnly">@android:color/primary_text_disable_only_funui</item>
<item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_disable_only_funui_inverse</item>
<item name="textColorPrimaryNoDisable">@android:color/primary_text_nodisable_funui</item>
<item name="textColorSecondaryNoDisable">@android:color/secondary_text_nodisable_funui</item>
<item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_nodisable_funui_inverse</item>
<item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_nodisable_funui_inverse</item>
<item name="textColorHint">@android:color/hint_foreground_funui</item>
<item name="textColorHintInverse">@android:color/hint_foreground_funui_inverse</item>
<item name="textColorSearchUrl">@android:color/search_url_text_funui</item>
<item name="textColorHighlight">@android:color/highlighted_text_funui</item>
<item name="textColorHighlightInverse">@android:color/highlighted_text_funui_inverse</item>
<item name="textColorLink">@android:color/funui_blue_light</item>
<item name="textColorLinkInverse">@android:color/funui_blue_light</item>
<item name="textColorAlertDialogListItem">@android:color/primary_text_funui</item>
     <item name="checkboxStyle">@android:style/Widget.Funui.CompoundButton.CheckBox</item>
         <item name="searchViewTextColor">@color/searchview_text_color</item>
<item name="textAppearanceLarge">@android:style/TextAppearance.Funui.Large</item>
<item name="textAppearanceMedium">@android:style/TextAppearance.Funui.Medium</item>
<item name="textAppearanceSmall">@android:style/TextAppearance.Funui.Small</item>
<item name="textAppearanceLargeInverse">@android:style/TextAppearance.Funui.Large.Inverse</item>
<item name="textAppearanceMediumInverse">@android:style/TextAppearance.Funui.Medium.Inverse</item>

</Resources>

然后我们查找一下其中的一个属性<item name="checkboxStyle">@android:style/Widget.Funui.CompoundButton.CheckBox</item>

我们先不说后面的@android:style/Widget.Funui.CompoundButton.CheckBox 就先看一下这个checkboxStyle ,搜索以后,发现如下代码

public class Button extends TextView {
public Button(Context context) {
this(context, null);
} public Button(Context context, AttributeSet attrs) { //引用的地方
        this(context, attrs, com.android.internal.R.attr.buttonStyle);
} public Button(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} @Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setClassName(Button.class.getName());
} @Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(Button.class.getName());
}
}

这就是第一种情况,也就是,属性是直接在代码中添加的,有点类似于我们的自定义属性。不过呢,这个明显的是,直接添加的一个theme,他的作用就跟我们直接创建一个aaa的style,然后new (.....,R.style.aaa)一样的,

只不过它是应用整个activity的

另外我们还发现了它出现在另外一个地方res/values/attr.xml中,如下

<!--类似于一个声明-->
<attr name="checkboxStyle" format="reference" />
<!-- Default CheckedTextView style. -->
<attr name="checkedTextViewStyle" format="reference" />
<!-- Default ListView style for drop downs. -->
<attr name="dropDownListViewStyle" format="reference" />
<!-- Default EditText style. -->
<attr name="editTextStyle" format="reference" />
<!-- Default ExpandableListView style. -->
<attr name="expandableListViewStyle" format="reference" />
<!-- ExpandableListView with white background. -->
<attr name="expandableListViewWhiteStyle" format="reference" />
<!-- Default Gallery style. -->
<attr name="galleryStyle" format="reference" />
<!-- Default GestureOverlayView style. -->
<attr name="gestureOverlayViewStyle" format="reference" />
<!-- Default GridView style. -->
<attr name="gridViewStyle" format="reference" />
<!-- The style resource to use for an ImageButton. -->
<attr name="imageButtonStyle" format="reference" />
<!-- The style resource to use for an ImageButton that is an image well. -->
<attr name="imageWellStyle" format="reference" />
<!-- Default ListView style. -->
<attr name="listViewStyle" format="reference" />

至于它后面跟的数值Widget.Funui.CompoundButton.CheckBox,如下

 <style name="Widget.CompoundButton.CheckBox">
<item name="android:button">?android:attr/listChoiceIndicatorMultiple</item>
</style>

我们可以看到,它其实就是一个checkbox 中button属性的设置

下面我们来查找另外的一个属性看看结果<item name="searchViewTextColor">@color/searchview_text_color</item>

仍然是在res/values/attr.xml里面看到它的身影

<attr name="searchViewTextColor" format="reference|color" />

另外,并没有在代码中看到它,只是在一些xml中看到了,如下

 <view class="android.widget.SearchView$SearchAutoComplete"
android:id="@+id/search_src_text"
android:layout_height="36dip"
android:layout_width="0dp"
android:layout_weight="1"
android:minWidth="@dimen/search_view_text_min_width"
android:layout_gravity="center_vertical"
android:paddingStart="@dimen/dropdownitem_text_padding_left"
android:paddingEnd="@dimen/dropdownitem_text_padding_right"
android:singleLine="true"
android:ellipsize="end"
android:background="@null"
android:inputType="text|textAutoComplete|textNoSuggestions"
android:textColor="?android:attr/searchViewTextColor"
android:textColorHint="?android:attr/searchViewTextColorHint"
android:imeOptions="actionSearch"
android:dropDownHeight="wrap_content"
android:dropDownAnchor="@id/search_edit_frame"
android:dropDownVerticalOffset="0dip"
android:dropDownHorizontalOffset="0dip"
android:contentDescription="@string/searchview_description_query"
/>
android:textColor="?android:attr/searchViewTextColor"
它是引用了
searchViewTextColor 这个值在theme有了定义,相当于引用了@color/searchview_text_color

这里我们是不是可以得出一个结论呢,
theme下定义的资源,我们都是可以直接使用的,也就是它就是一个资源的别名,就像定义在value中一样。
不同的是,它是可以被覆盖的,也就是说,当前应用会覆盖系统默认的

theme- 工作原理的更多相关文章

  1. Struts2(二):工作原理

    struts可查看源码:https://github.com/apache/struts 在学习struts2之前,我先看了一些比较早版本对struts2的工作原理相关的介绍,顺便抄写过来,用来帮助自 ...

  2. WordPress工作原理之程序文件执行顺序

    在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...

  3. Orchard工作原理

    概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像常规的web程序,它更像 ...

  4. How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧

    个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree       ----|   |---->  RenderTree CSSOMtree  ----| ...

  5. Spring MVC的工作原理,我们来看看其源码实现

    前言 开心一刻 晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢.哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点.看 ...

  6. Odoo search 搜索视图详解与搜索视图工作原理

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html 搜索视图 搜索视图的search标签本身没什么属性可以使用,只要是<searc ...

  7. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧

    原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...

  8. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  9. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  10. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

随机推荐

  1. linu基础入门(一)

    原创作品,允许转载,转载时请务必声明作者信息和本声明. https://www.cnblogs.com/zhu520/p/10730550.html 本人小白,有错指出.谢谢! 一:根据上一步安装与新 ...

  2. C++调用Lua的性能測试

    游戏服务器经典的架构就是C++和Lua的结合,C++开发主体框架.Lua实现一些复杂的逻辑.我们都知道Lua是一种很快的语言.可是究竟有多块.我们測试下看看. C++调用Lua的性能測试.发现不正确的 ...

  3. android源代码编译完毕之后

    android源代码编译完毕之后,在根文件夹下会有一个out文件夹生成,假设我们想要执行虚拟机的话,须要配置一下环境变量. 首先我们使用以下的命令打开配置环境变量的文件: gedit ~./bashr ...

  4. 轻松python专题--文本

    基础篇:(取材于零基础学python) 7.1 python中的字符串简单介绍与经常使用函数 7.2 字符串常量 7.3 字符串的一般使用 7.4 改动字符串实例 7.5 文本解析 7.6 字符串格式 ...

  5. Magento--修改已存在的订单的运费

    遇到一种情况,需要在下单后再由管理员添加订单运费,然后顾客再付款.那么问题来了,如何给订单添加运费呢?下面是一段代码,可以实现该功能: $orderId = 'your order id';$orde ...

  6. 图解RHEL6从安装光盘中进行yum安装

    图解RHEL6从安装光盘中进行yum安装 导读:我们这里讲的Yum,是Yellow dog Updater, Modified的缩写,可执行程序名为yum,它的理念是使用一个中心仓库(reposito ...

  7. xfce4 + docky ,docky 上面那透明的一条黑色横线去掉方法

    在安装完Debian 9 + xfce4桌面后 ,添加docky启动后,会在docky 上面有一条黑色横线看起来非常不舒服. 去掉方法:设置管理器->窗口管理器微调->合成器->取消 ...

  8. 通过域 组策略禁用U盘(只允许部份许可U盘可在客户端读取)

    U盘禁用设置步骤: 1.客户端 注册表修改,USBStor  的start改为4 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbSto ...

  9. java中锁的理解

    在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关键字被常用于维护数据一致性.synchronized机制是给共享 ...

  10. java之 ------ 几种常见的简单设计模式

    前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.反复出现的特定问题的解决方式.使用设计模式是为了可重用代码.让代 ...