68

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

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

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

4

6 回答 6

91

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

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

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

于 2013-03-02T03:45:55.717 回答
34

引用自 Android API 指南:

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

完整的文档

所以我想如果你把任何样式放在任何文件中并不重要,只要它是一个位于res/values/文件夹中的 xml 文件。

于 2013-11-06T09:16:43.727 回答
14

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

值得注意的是,Google 的 iosched2014 应用程序只有一个 styles.xml(没有 theme.xml)。

https://github.com/google/iosched

于 2014-11-21T19:30:12.423 回答
4

取自样式和主题文档,在定义样式部分:

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

The root node of the XML file must be <resources>.
于 2013-12-18T16:36:25.283 回答
1

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

<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_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/ToolbarStyle"
    android:theme="@style/ToolbarTheme">
</android.support.v7.widget.Toolbar>

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

于 2016-11-18T23:23:59.943 回答
-5

嗨,这是一篇关于 android 中样式和主题 XML 之间区别的文章,请通过

还有关于 Android 中的样式和主题的 android文档。

于 2013-03-02T03:54:14.367 回答