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之间 ...
随机推荐
- POJ1158 城市交通Traffic lights IOI 1999 (最短路)
POJ1158 城市交通Traffic lights IOI 1999 (最短路) (1) 问题描述(probolem) 在d城里交通的安排不同寻常,城中有路口和路口之间的道路,再任意两个不同的路口之 ...
- Java,泛型类型通配符和C#对照
c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,仅仅是语法糖,在编译器编译的时候都转换成object类型 类型通配符在java中表示的是泛型类型的父类 ...
- FSM之三--代码风格
FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html Moore型状态机与mealy型状态机相比,由于其状态输 ...
- css3 背景过度实现
代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&q ...
- OpenSUSE42.3 leap 开启ssh登陆
一.产看ssh是否安装 OpenSUSE:~ # rpm -qa | grep ssh libssh2-1-1.4.3-18.3.x86_64openssh-askpass-1.2.4.1-12.1. ...
- 如何在VMware中创建虚拟机
今天给大家分享如何在VMware中创建虚拟机,具体的教程如下.在这里小编提前下载了Ubuntu14.04桌面系统,为后面在虚拟机中安装Ubuntu14.04桌面系统做准备. 1.从官网上或者直接百度上 ...
- node.学习笔记(关于http2的讲解)
个人总结:读完这篇文章需要30分钟 http2部分很有学习价值,可以好好看. 用node搭建TCP服务器 用node搭建HTTP服务器 用node文件fs模块对文件读取,并用流的方式写入 用url路 ...
- @Mapper注解在springboot中无法注入
问题① @Mapper注解报红无法注入 方法 在pom文件中添加依赖
- 商业模式(三):P2P网贷平台,毛利润测算
之前谈到P2P网贷平台,主要的收入就是"息差". 一直以来,想详细写点P2P平台的收益到底如何的,奈何自己感觉收入上的点不算多,对财务这种核心机密了解的也不多,一直没 ...
- R中读取文件,找不到路径问题 No such file or directory
R中读取文件,找不到路径问题 No such file or directory 近日,读取文件时.出现例如以下问题 > passenger = read.csv('internationa ...