解决方法
有两个主要区别:
首先,通过样式分配给视图的属性将仅适用于该视图,而通过android:theme分配给它的属性将应用于该视图及其所有子项.例如,考虑以下样式资源:
<style name="my_background"> <item name="android:background">@drawable/gradient</item> </style>
如果我们使用style =“@ style / my_background”将它应用于具有三个子TextView的LinearLayout,则linearlayout将使用渐变背景绘制,但textviews的背景将保持不变.
如果我们使用android:theme =“@ style / my_background”将它应用于LinearLayout,那么linearlayout和三个textviews中的每一个都将使用渐变作为其背景.
第二个关键区别是,如果在视图的主题中定义了视图,则某些属性仅影响视图.例如,考虑以下样式资源:
<style name="checkBoxes"> <item name="colorAccent">#caf</item> <item name="colorControlNormal">#caf</item> </style>
如果我使用style =“@ style / checkBoxes”将它应用于CheckBox,则不会发生任何事情.如果我使用android:theme =“@ style / checkBoxes”应用它,复选框的颜色将会改变.
就像第一条规则所说的那样,包含主题属性的样式将应用于具有android:theme属性的视图的所有子项.所以我可以通过将android:theme =“@ style / checkBoxes”应用到我的linearlayout来改变linearlayout中所有复选框的颜色.