首先看一下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. Eclipse导出JavaDoc(并解决中文乱码问题)

    一. 使用Eclipse生成注释文档 使用eclipse生成文档(javadoc)主要有三种方法: 1,在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的 ...

  2. 洛谷 P1293 班级聚会

    P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...

  3. ArcGIS api for javascript——地图配置-定制缩放动画,定制缩放框

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  4. KM最大匹配 HDU 2255

    KM算法详解+模板 - wenr - 博客园  http://www.cnblogs.com/wenruo/p/5264235.html #include<iostream> #inclu ...

  5. 五大最受欢迎的BUG管理系统

    Google在中国大陆遭遇变故做出临时性的退出大陆市场,也使非常多忠实的用户受到小小的挫折,以本公司为例.原本的BUG都是记录在google的 EXCEL在线文档中,由于常常性的打不开.測试和开发组在 ...

  6. 菜鸟之webservice(一) 服务端搭建

    首先说一下,为什么取名叫菜鸟之webservice,由于本人技术真的不咋滴,写博客仅仅是为了对所学知识的总结.webservice对于我来说一直都是高大上的感觉,一个java web和javase都没 ...

  7. 25.内置API

    转自:https://www.cnblogs.com/best/tag/Angular/ 3.1.数据转换 示例: 默认情况JavaScript中对象是传引用的: var tom={name:&quo ...

  8. 突破极限 解决大硬盘上安装Sco Unix新思路

    突破极限 解决大硬盘上安装Sco Unix新思路 [url]http://os.51cto.com/art/200809/89750.htm[/url]       硬盘越做越大,然我喜欢让我忧.10 ...

  9. Pycharm 的安装

    一. Windows 安装 汉化 破解补丁激活 下载 `https://pan.baidu.com/s/1qjI9uHaw0x374rwu6H8djA` 并将 JetbrainsCrack-2.8-r ...

  10. XML之序列化C#实体类,DataTable,List

    1. static void Main(string[] args) { #region 实体类 Request patientIn = new Request(); patientIn.System ...