theme- 工作原理
首先看一下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- 工作原理的更多相关文章
- Struts2(二):工作原理
struts可查看源码:https://github.com/apache/struts 在学习struts2之前,我先看了一些比较早版本对struts2的工作原理相关的介绍,顺便抄写过来,用来帮助自 ...
- WordPress工作原理之程序文件执行顺序
在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...
- Orchard工作原理
概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像常规的web程序,它更像 ...
- How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧
个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree ----| |----> RenderTree CSSOMtree ----| ...
- Spring MVC的工作原理,我们来看看其源码实现
前言 开心一刻 晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢.哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点.看 ...
- Odoo search 搜索视图详解与搜索视图工作原理
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html 搜索视图 搜索视图的search标签本身没什么属性可以使用,只要是<searc ...
- JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十一章. 迄 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
随机推荐
- Use Uncertainty As a Driver
 Use Uncertainty As a Driver Kevlin Henney ConFRonTEd WiTH TWo opTionS, most people think that the ...
- mysql---union的使用方法
union的作用非常easy用来合并两条sql的结果集 语法: SQL1 UNION SQL2 现有一张价格表 要求:求出价格低于2000和价格高于3000的商品.不能用or和not between- ...
- POJ2369 Permutations【置换群】
题目链接: http://poj.org/problem?id=2369 题目大意: 给定一个序列.问最少须要多少次置换才干变为 1.2.-.N 的有序序列.比方说给 定5个数的序列 4 1 5 2 ...
- 书剑恩仇录online全套源代码(服务端+client+文档)
书剑恩仇录online全套源代码(服务端+client+文档).vc++开发,解压后将近10G大小,眼下网上最完整版本号,包括client源代码.服务端源代码.工具源代码.sdk.文档-- <书 ...
- 在Qt 4.4中,Alien Widget诞生了(Window负责与窗口系统的联系。Alien被号称是所有闪烁的终结者)
2011年09月29日 23:47:46 阅读数:7269 Qt 4.0 automatically double-buffers Qt 4.1 QWidget::autoFillBackground ...
- Magento--修改已存在的订单的运费
遇到一种情况,需要在下单后再由管理员添加订单运费,然后顾客再付款.那么问题来了,如何给订单添加运费呢?下面是一段代码,可以实现该功能: $orderId = 'your order id';$orde ...
- POJ 1986 裸的LCA
思路:搞了一发链剖 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...
- PL/SQL Developer怎么连接远程数据库
首先打开电脑,到PL/SQL安装的指定目录 [D:\app\DZL\product\10.2.0\dbhome_1\NETWORK\ADMIN]或者[D:\oracle\product\10.2.0\ ...
- MYSQL去重复并计算总数的sql语句
SELECT count(distinct uid) FROM `two_users`
- 3D图形处理库
转自 3D图形处理库 高性能软件光栅化渲染器 OpenSWR OpenSWR —— 用于OpenGL的高性能,高度可扩展的软件光栅化渲染器 OpenSWR的目的是提供一个高性能,高度可扩展的OpenG ...