我想在构建时更改应用程序的主题(实际上我只需要更改windowBackground),这取决于我的环境。
styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<style name="AppTheme.WithSplashScreen" parent="AppTheme">
<item name="android:windowBackground">@drawable/window_background</item>
</style>
</resources>
我尝试了清单占位符并将主题名称注入清单 app / build.gradle
defaultConfig {
manifestPlaceholders = [app_theme:"@style/AppTheme.WithSplashScreen"]
//...
}
AndroidManifest.xml
<application
android:theme="@{app_theme}">
但我遇到了错误
app / android / app / build / intermediates / manifests / full / debug / AndroidManifest.xml:56:24-44: AAPT:未指定资源类型(在“主题”处带有值 “ @ {app_theme}”)。
也许appt期望主题资源格式为R.class的id,但是我不确定如何从gradle文件中引用它。否则应该有其他方式。
我无法在运行时应用主题,因为我希望窗口背景立即显示。
答案 0 :(得分:0)
可能您已经解决了它,但是我认为在我的APP中遇到同样的问题时,回答这个问题很有价值。
根据文档here,您可以在清单中插入构建变量,但语法使用$而不是@。
在我的APP中,我使用了:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="${appTheme}">
然后在build.gradle
flavorDimensions "version"
productFlavors {
flavor1{
dimension "version"
...
manifestPlaceholders = [appTheme: "@style/AppTheme"]
}
flavor2 {
dimension "version"
...
manifestPlaceholders = [appTheme: "@style/OtherAppTheme"]
}
}