Android Studio中产品风味的自定义样式?

5

我有一个带有多个产品风味(在这个例子中是'foo')的模块。基础主题(样式)在模块内定义。

现在我的想法是通过在 #flavor#/res/values/ 文件夹中添加 styles.xml 并扩展样式来修改每种风味的主题,就像我以前在 Eclipse 中使用库项目机制一样。但是很明显,完整的样式被覆盖了。我的意图是,gradle会正确地合并文件。

  • MyApp
    • app
    • src
      • main
        • java
        • res\values
          • main_styles.xml
      • foo
        • java
        • res\values
          • 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>

What I expect:

<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>

What I get:

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

有什么建议吗?


我认为这是可能的,可以使用这个:https://dev59.com/IF0a5IYBdhLWcg3wfIp-#30279350 - android developer
2个回答

1

如果两个文件名相同,则会出现相同的问题 :-/ - Philipp Nußbaum
1
嗯...看起来你无法: https://groups.google.com/forum/#!topic/adt-dev/sQTsk35U7Ic - Fifer Sheep

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>

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