样式和android:theme属性有什么区别?

32

android:themestyle属性是在Android布局XML文件中用于视图(如和)的关键区别是什么?

它们如何使用?

何时使用哪个?


https://developer.android.com/guide/topics/ui/look-and-feel/themes.html - ADM
谢谢链接 @ADM,我已经参考了关于主题的 Android 文档,但是没有明确提到或者给出使用 android:theme布局视图 的示例。但是他们肯定展示了使用 android:theme应用程序活动 的示例,所以我认为 android:theme 不适用于 布局视图 - Vaibhav Surana
1个回答

42

有两个关键区别:

首先,通过style分配给视图的属性仅适用于该视图,而通过android:theme分配给它的属性将同时应用于该视图及其所有子项。例如,请考虑此样式资源:

<style name="my_background">
    <item name="android:background">@drawable/gradient</item>
</style>
如果我们使用 style="@style/my_background" 将其应用于具有三个子 TextViewLinearLayout,那么线性布局将绘制出渐变背景,但是文本视图的背景将保持不变。
如果我们改用 android:theme="@style/my_background" 应用于 LinearLayout,则线性布局和每个文本视图都将使用渐变作为它们的背景。
第二个关键区别是,某些属性仅在定义在该视图主题中时才影响该视图。例如,考虑此样式资源:
<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" 应用于我的线性布局来更改线性布局中所有复选框的颜色。


4
有趣。那么,如果属性仅在主题中使用而不是样式中使用时,您如何知道它们只影响视图?是否有一个列表可以参考? - SMBiggs
. . .将应用于该视图以及其所有子视图。 -- 这个认识让我困惑了几个小时。请问您是如何发现这些信息的? - CzarMatt
1
@CzarMatt 不幸的是,答案是“实验性的”。在我正在进行的一个真实项目中,我观察到了我回答中描述的确切情况。我应用了一个设置渐变背景的主题到我的Toolbar,并注意到标题和溢出图标得到了自己的较小的渐变色。 - Ben P.
@BenP。感谢您的回复 - 我深有同感。此外,在再次查看文档后,发现这里有一个注释:https://developer.android.com/guide/topics/ui/look-and-feel/themes#Styles,描述了这个有趣的问题。也许在我阅读文档和最近之间,文档已经更新了这些信息。 ¯_(ツ)_/¯ - CzarMatt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接