And*_*rew 7 android android-theme android-gradle-plugin
我正在开发一个具有多种风格的 android 项目。
这很好用,我可以自定义应用程序的元素,例如颜色和字符串资源。
我想让它使一些风格基于 AppCompat 浅色主题,有些风格基于 AppCompat 深色主题。
我知道我可以通过<items>在我的风格和每种风格中重复所有内容来实现这一点,将主题设置为指向每个应用程序的自定义清单中的每个主题,但这似乎有点过分。
有没有一些简单的方法来设置这样的主题
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/primary_colour_tone1</item>
...lots more settings
</style>
Run Code Online (Sandbox Code Playgroud)
但是不是直接指向 Theme.AppCompat.NoActionBar 指向在每个 gradle 构建中可以设置不同的引用?
所以像这样:
<style name="AppTheme" parent="**Theme reference here**">
<item name="colorPrimary">@color/primary_colour_tone1</item>
...lots more settings
</style>
Run Code Online (Sandbox Code Playgroud)
我试过使用 @string/theme_name 之类的东西,但这不起作用,有没有简单的方法来做到这一点?
您可以sourceSets为一种或多种风格定义公共资源(也可以是源),这意味着您不必为所有风格重复所有资源。
例如,您有 3 种口味。flavor1并flavor2使用相同的主题,但flavor3. 然后,您可以为公共资源定义额外的源集,例如commonA(用于风味 1、风味 2)和commonB(用于风味 3):
...
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']
}
}
Run Code Online (Sandbox Code Playgroud)
您还应该创建文件夹src/commanA,src/commonB然后将您的公共资源放入它们的res文件夹中。
仅供参考,以防有人正在寻找一种简单的方法来实现这一目标。
在你的清单中,将你的主题更新为这样的......
android:theme="${appTheme}"
Run Code Online (Sandbox Code Playgroud)
然后在你的 app.gradle 中做这样的事情......
productFlavors {
flavorA{
manifestPlaceholders = [appTheme: "@style/AppThemeA"]
}
flavorB{
manifestPlaceholders = [appTheme: "@style/AppThemeB"]
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在那里使用任何你想要的风格,它们将与所选的口味相结合。
| 归档时间: |
|
| 查看次数: |
3400 次 |
| 最近记录: |