Android 中的Theme和Style

一,Android 中各种XML文件的作用

1、arrays.xml 定义数组

2、colors.xml 定义颜色

3、dimens.xml 定义尺寸

4、strings.xml 定义字符串

5、styles.xml 定义样式

6、phoinix_popumenu_style.xml selector选择

7、menu 菜单

8、drawable 图片及自定义控件资源如: white_background.xml 白色圆角矩形做背景

9、anim 旋转动画资源

Android 中各种XML文件的作用

二,API文档Android 包介绍

包含应用程序在平台上使用的各种资源,并且定义了应用程序使用系统功能的权限,在这个包中,只需要经常查看Manifest.permission和R.style两个类

Manifest类,继承自java . lang . object,含有一个Public 构造方法:Manifest();和两个嵌套类:Manifest.permission Manifest.permission_group

Manifest.permission:对权限进行声明,如:public static final String SEND_SMS

Manifest.permission_group :对手机固有功能进行声明,如:public static final String PHONE;

R:继承自java . lang . object,含有一个构造方法和以下22个嵌套类:

R.anim:对动画相关常量进行声明 R.animator :声明了淡入,淡出两个常量 R.array R.attr :声明了资源固有属性 R.bool:仅有一个 R.bool()构造函数 R.color:声明了系统默认的颜色 R.dimen:声明了应用程序图标的尺寸,dialog和通知的尺寸R.drawable :对控件资源进行了声明 R.fraction R.id:定义了可访问性控件标识符
R.integer R.interpolator R.layout R.menu R.mipmap R.plurals R.rawR.string:字符串 R.style:定义了主题和样式 R.styleable:定义了可变的样式 R.transition R.xml

在文档里去探究这实在是没什么意义,可以使用这些R类资源,但最好还是用自己应用程序的资源文件,特别是 R.drawable资源,因为平台不同版本之间可能不同,唯一可直接用的是style资源。

三,Android的主题Theme和样式style

这里,主题Theme,是宏观上的风格,是装扮全局的;样式style:是对细节的样式,对具体部件的。

在R.style,很明显可以看出三大块:TextAppearance打头的,为文本外观样式;Theme打头的,为主题;Widget打头的,为小部件样式。和少数几个控件。同时还可以注意三个关键词段:DeviceDefault,Holo,Material

关于Theme,Theme_Material,Material主题;Theme_DeviceDefault,target API在14及以上的默认主题;Theme_Holo,target API在11–13的默认主题;Theme,是target API在10及以下的默认主题;其他的是派生子主题。如果从高API开始就是用默认主题,在不同的设备上显示就可能不一样,所以,需要在清单文件里显示指出,如

Theme_Holo是3.0开始有的,后来Android 4.0发布同时也发布了指导性的应用设计规范《Android Design》 ,有了设计规范的指导,就有了更多应用采用了Holo Theme,尤其国外的应用。Holo Theme的主要特点是轻快的颜色、适当的阴影、卡片化布局、方角矩形。Android的Holo Theme。Android
Design 与 Holo Theme。DeviceDefault主题(继承自Holo主题),实际上就是在Holo主题上定制主题(For厂商)。透过下面Theme_Holo及其派生主题解释,另外的主题意思也不能明白

1、Theme_Holo

意思为:New Honeycomb全屏显示样式,默认是黑背景。

1.1、Theme_Holo_Dialog

意思为:将activity显示成对话框的样式,需自定义大小,否则View可能显示不全。

1.1.1、Theme_Holo_Dialog_MinWidth

意思为:将activity显示成对话框的样式,显示最小状态时,

1.1.2、Theme_Holo_DialogWhenLarge

意思为:将activity显示成对话框的样式,显示最大状态时,

1.1.3、Theme_Holo_DialogWhenLarge_NoActionBar

意思为:将activity显示成对话框的样式,显示最大状态时,且没有action bar

1.1.4、Theme_Holo_Dialog_NoActionBar

意思为:将activity显示成对话框的样式,且没有action bar,默认状态 ,需自定义大小,否则View可能显示不全

1.1.5、Theme_Holo_Dialog_NoActionBar_MinWidth

意思为:将activity显示成对话框的样式,且没有action bar,显示最小状态时

1.2、Theme_Holo_InputMethod

类似于panel;需自定义大小

1.3、Theme_Holo_NoActionBar

意思为: 默认状态下,没有action bar的样式。

1.3.1、Theme_Holo_NoActionBar_Fullscreen

意思为: 默认状态下,没有action bar且全屏的样式。

1.4、Theme_Holo_Wallpaper

意思为: 使用墙纸做为样式背景,默认状态下。

1.4.1、Theme_Holo_Wallpaper_NoActionBar

意思为: 使用墙纸做为样式背景,且没有action bar。

1.5、Theme_Holo_Panel

意思为: 默认将一个activity显示成一个对话框样式,区别于对话框,这个没有外边框,没有任何样式元素只有一个空的矩形框。

2、Theme_Holo_Light

意思为: 默认样式,区别于黑背景,这个属于亮背景。

2.1、Theme_Holo_Light_Dialog

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景。

2.1.1、Theme_Holo_Light_Dialog_MinWidth

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景,显示最小状态时。

2.1.2、Theme_Holo_Light_DialogWhenLarge

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景,显示最大状态时。

2.1.3、Theme_Holo_Light_DialogWhenLarge_NoActionBar

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景,显示最大状态,且没有action bar时。

2.1.4、Theme_Holo_Light_Dialog_NoActionBar

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景,且没有action bar时。需自定义大小

2.1.5、Theme_Holo_Light_Dialog_NoActionBar_MinWidth

意思为: 默认将一个activity显示成一个对话框样式,区别于黑背景,这个属于亮背景,且没有action bar时,显示最小状态时。

2.2、Theme_Holo_Light_Panel

意思为: 默认将一个activity显示成一个对话框样式,区别于对话框,这个没有外边框,没有任何样式元素只有一个空的矩形框,区别于黑背景,这个属于亮背景。需自定义大小

3、Theme_NoTitleBar_OverlayActionModes

意思为:( 这里我按照api翻译为:没有标题栏,但状态栏将覆盖应用内容,而不是将应用内容挤下去为自己腾出空间。)不太明白哪里会用到此主题。留待以后去解决

4、Theme_WithActionBar

意思为:显示action Bar的主题样式

Theme Holo

四,从源码看Style和Theme
UI设计,是从Style和Theme开始,使用和自定义View,处理事件响应。从源头弄明白Style和Theme是很有必要的。
1、位置

在Android的frameworks/base/core/res/res/values目录下有一下几个文件:
这几个定义了系统的theme:
themes.xml
themes_device_defaults.xml

themes_holo.xml

themes_leanback.xml

themes_material.xml

themes_micro.xml

这几个文件定义了系统的style:
styles.xml

styles_device_defaults.xml

styles_holo.xml

styles_leanback.xml

styles_material.xml

styles_micro.xml

其中micro是为手表的,leanback是为电视的
2,Theme.xml
对theme的几个文件浏览一下,结构大体相同,第一个