styles.xml 和 theme.xml 有啥区别

Posted

技术标签:

【中文标题】styles.xml 和 theme.xml 有啥区别【英文标题】:What is difference among styles.xml and themes.xmlstyles.xml 和 theme.xml 有什么区别 【发布时间】:2013-02-16 16:52:35 【问题描述】:

我可以知道styles.xmlthemes.xml 有什么区别吗?对我来说,它们只是看起来一样,因为两个 XML 格式相同。

<style name="...
    <item name="...

那么,在我提供自定义颜色、大小、可绘制...的应用程序中,我是否还需要styles.xmlthemes.xml?我应该如何决定将哪个 XML 放入哪个文件?

【问题讨论】:

【参考方案1】:

出Styles and Themes的整页。您可能正在寻找这条线。

当您将样式应用于布局中的单个视图时,属性 由样式定义的仅应用于该视图。如果一种风格是 应用于 ViewGroup,子 View 元素不会继承 样式属性——只有你直接应用的元素 style 将应用其属性。但是,您可以应用一种样式,以便 它适用于所有 View 元素——通过将样式应用为主题。

当您应用为主题时,它会更改范围内的所有内容,具体取决于您将其应用到 Activity 还是 Application。风格更“本地化”。

【讨论】:

不,它没有解释两个文件之间的区别,它只是解释了概念上的区别。然而,它可能并不复杂,因为在大多数示例中,我们看到您将“MyTheme”放在styles.xml 中,并将其用作清单中的主题。例如为了能够在manifest中使用:,不清楚是否需要在styles.xml或themes.xml中定义CustomTheme或者在哪一个。 这根本没有涵盖styles.xml 和themes.xml 之间的区别。见@iceagleanswerhere 为什么 不覆盖父样式? @GilbertoIbarra 因为它不继承自它。样式没有级联。【参考方案2】:

引自 android API 指南:

要创建一组样式,请将 XML 文件保存在项目的 res/values/ 目录中。 XML 文件的名称是任意的,但必须使用.xml 扩展名并保存在res/values/ 文件夹中。 XML 文件的根节点必须是&lt;resources&gt;

Full documentation

所以我猜你是否将任何样式放在任何文件中并不重要,只要它是位于 res/values/ 文件夹中的 xml 文件。

【讨论】:

是的,人们使用styles.xml 和themes.xml 的原因是为了区分应用于单个视图的样式和作为主题应用于整个活动/应用程序的样式。它只是让您更容易筛选所有不同的样式。【参考方案3】:

正如许多答案所表明的那样,styles.xml 和 theme.xml 之间没有功能差异。

值得注意的是,谷歌的 iosched2014 应用只有一个 styles.xml(没有主题.xml)。

https://github.com/google/iosched

【讨论】:

【参考方案4】:

取自 Styles and Themes 文档的定义样式部分:

要创建一组样式,请将 XML 文件保存在项目的 res/values/ 目录中。 XML 文件的名称是任意的,但必须使用 .xml 扩展名并保存在 res/values/ 文件夹中。

The root node of the XML file must be <resources>.

【讨论】:

【参考方案5】:

我只是意识到,例如工具栏文本颜色进入主题声明,而其他方面进入样式声明

<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
</style>

<style name="ToolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
    <item name="android:minHeight">?attr/actionBarSize</item>
    <item name="android:background">@color/colorPrimary</item>
</style>

并且在工具栏声明中

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    style="@style/ToolbarStyle"
    android:theme="@style/ToolbarTheme">
</android.support.v7.widget.Toolbar>

我试图通过将其项目移动到样式中来省略主题,但这不起作用。因此,在这种情况下,它们似乎只是作为主题的样式,因为它们会影响工具栏中的继承子项,例如文本字段。

【讨论】:

【参考方案6】:

你好,这里有一篇关于android中XML样式和主题区别的文章please go through

还有关于 Android 中的样式和主题的 android documentation

【讨论】:

以上是关于styles.xml 和 theme.xml 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

styles.xml 中的自定义属性

如何在 Android 中从 styles.xml 设置 EditText 样式?

为啥我在 theme.xml 中的 colorPrimary 和 .. 不是 color ?我是初学者,当我打开 color.xml 时,我的 color.xml 中有紫色和深紫色

相当于Xcode中android的styles.xml

有没有办法只使用styles.xml 设置本机AlertDialog 角半径而无需额外代码?

我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?