Google的官方文档中关于theme和style说明还不够详细,特补充以下:
1.Style和Theme都是属性集合,他们的实现原理是一致的,差别在于用途的不同;
2.Style只包含某个控件的属性值,例如width、height、backcolor等等,仅给控件使用来填充自身属性的,所以Style中的属性,都应能被关联控件识别,不属于关联控件属性的不应改定义Style中,例如TextView的Style中,不应该出现一个“ABC”这样的属性;
3.Theme则是单纯的属性值集合,相当于一个数据库,跟使用者无关,里面放置什么数据不做限制,仅供使用者共享引用这些属性。例如某控件属性值可以通过“?attr/abc”来引用Theme中的"abc"属性值;
4.Style的有效范围仅限于单个控件;
5.Theme的有效范围覆盖使用者以及子控件(全局型数据库);
6.APP的Theme中包含各控件的默认Style引用,这样控件即使没有显式地指明Style,也会使用APP Theme中的Style;
7.控件额外显式地指定Style,则指定Style中包含的属性会覆盖APP Theme指定的默认Style属性。例如xml中写了“style=@style/abc”,则“abc”style中的属性会覆盖APP Theme中的相关属性。