Android Studio中定制的产品风格样式?

时间:2014-09-12 13:04:17

标签: android xml gradle styles themes

我有一个包含多种产品风格的模块(在这个例子中是' foo')。基本主题(样式)在模块中定义。

现在我的想法是通过在#flavor#/ res / values /文件夹中添加styles.xml来修改这个主题,并使用库项目机制扩展样式,就像之前在Eclipse中所做的那样。但显然完整的风格被覆盖。我的意图是,gradle正确地将文件合并在一起。

  • MyApp的
    • 应用
    • SRC
      • 主要
        • 的java
        • RES \值
          • main_styles.xml
      • FOO
        • 的java
        • RES \值
          • foo_styles.xml

main_styles:

<style name="Theme.Main" parent="android:Theme.Light">
    <item name="android:title">A title</item>
    <item name="android:subtitle">A subtitle</item>

</style>

foo_styles:

<style name="Theme.Main" parent="android:Theme.Light">
    <item name="android:background">@color/foo</item>
</style>

我的期望:

<style name="Theme.Main" parent="android:Theme.Light">
    <item name="android:title">A title</item>
    <item name="android:subtitle">A subtitle</item>
    <item name="android:background">@color/foo</item>
</style>

我得到了什么:

<style name="Theme.Main" parent="android:Theme.Light">
    <item name="android:background">@color/foo</item>
</style>

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果它们具有相同的名称,它们只会合并。称他们为styles.xml

编辑:您似乎无法:https://groups.google.com/forum/#!topic/adt-dev/sQTsk35U7Ic

答案 1 :(得分:1)

合并是不可能的,但是通过这种方式可以达到同样的效果(AndroidManifest 指的是 foo,foo 指的是 main,main 指的是 android:Theme.Light)...

// AndroidManifest.xml
<application ... android:theme="@style/MyStyleFoo" ...>
// src/main/res/values/styles.xml
<resources>
    <style name="MyStyleMain" parent="android:Theme.Light">
        <item name="android:title">A title</item>
        <item name="android:subtitle">A subtitle</item>
    </style>
</resources>
// src/foo/res/values/styles.xml
<resources>
    <style name="MyStyleFoo" parent="MyStyleMain">
        <item name="android:background">@color/foo</item>
    </style>
</resources>