具有不同基本主题的Android风格
作者:互联网
我有一个正在处理的多种口味的android项目.
这工作正常,我可以自定义应用程序的元素,例如颜色和字符串资源.
我要使其成为某些口味基于AppCompat浅色主题,而某些口味基于AppCompat深色主题.
我知道我可以通过重复所有< items>以我的风格和每种口味设置,主题指向每个应用程序的自定义清单中的每个主题,但这似乎有些过头.
是否有一些简单的方法可以像这样设置主题
<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之类的方法,但这不起作用,有没有简单的方法可以做到这一点?
解决方法:
您可以为一种或多种口味的通用资源(也可以是来源)定义sourceSets,这意味着您不必为所有口味重复所有资源.
例如,您有3种口味. flavour1和flavour2使用相同的主题,但flavour3.然后,您可以为公共资源定义额外的源集,例如commonA(对于flavour1,favour2)和commonB(对于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,然后将公共资源放入其res文件夹.
标签:android-gradle,android-theme,android 来源: https://codeday.me/bug/20191027/1945885.html