Изменение темы Android в скрипте Gradle. - PullRequest
0 голосов
/ 18 января 2019

Я хочу изменить тему приложения (на самом деле мне нужно изменить только 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>

Я попытался заполнить манифест и ввести имя темы в манифест приложение / build.gradle

defaultConfig {
      manifestPlaceholders = [app_theme:"@style/AppTheme.WithSplashScreen"]
      //...
  }

AndroidManifest.xml

<application
    android:theme="@{app_theme}">

но я получил ошибку

приложение / Android / приложение / сборки / промежуточные / манифесты / полный / отлаживать / AndroidManifest.xml: 56: 24-44: AAPT: не указан тип ресурса (в 'theme' со значением @ {App_theme} ').

Возможно, appt ожидает идентификатор ресурса формы R.class, но я не уверен, как ссылаться на него из файла Gradle. Или должен быть другой путь.

Я не могу применять темы во время выполнения, потому что хочу, чтобы фон окна появлялся немедленно.

1 Ответ

0 голосов
/ 04 августа 2019

Возможно, вы уже решили это, но я думаю, что стоит ответить на этот вопрос, поскольку я пришел к той же потребности в моем приложении.

Согласно документации здесь вы можете внедрить переменные сборки в манифест, но синтаксис с $, а не @.

В моем приложении я использовал:

<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"]
    }
}
...