我正在开发一个具有多种风格的 android 项目。
这很好用,我可以自定义应用程序的元素,例如颜色和字符串资源。
我想让一些风格基于 AppCompat 浅色主题,一些基于 AppCompat 深色主题。
我知道我可以通过重复所有 <items>
来做到这一点在我的风格和每种风格中,将主题设置为指向每个应用程序的自定义 list 中的每个主题,但这似乎有点过分了。
是否有一些简单的方法来设置这样的主题
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/primary_colour_tone1</item>
...lots more settings
</style>
但是不是直接指向 Theme.AppCompat.NoActionBar 而是指向在每个 gradle 构建中可以不同设置的引用?
所以是这样的:
<style name="AppTheme" parent="**Theme reference here**">
<item name="colorPrimary">@color/primary_colour_tone1</item>
...lots more settings
</style>
我试过使用@string/theme_name 之类的东西,但它不起作用,有没有简单的方法可以做到这一点?
最佳答案
您可以为一种或多种风格的公共(public)资源(也称为源)定义 sourceSets
,这意味着您不必为所有风格重复所有资源。
例如,您有 3 种口味。 flavor1
和 flavor2
使用相同的主题,但 flavor3
。然后你可以为公共(public)资源定义额外的源集,例如commonA
(for flavor1, flavor2)和commonB
(for flavor3):
...
android {
...
productFlavors {
flavor1{
}
flavor2{
}
flavor3{
}
}
sourceSets.flavor1{
res.srcDirs = ['res', 'src/commonA/res']
}
sourceSets.flavor2{
res.srcDirs = ['res', 'src/commonA/res']
}
sourceSets.flavor3{
res.srcDirs = ['res', 'src/commonB/res']
}
}
您还应该创建文件夹 src/commanA
和 src/commonB
然后将您的公共(public)资源放入它们的 res
文件夹中。
关于具有不同基本主题的 Android 风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068870/