父级样式取决于构建变体

Parent style depending on build variant

我在 themes.xml 中定义了两个主题。

这两个主题通过 productFlavors 在清单中应用:

build.gradle

productFlavors {
            flavor1 {
                dimension "theme"
                manifestPlaceholders = [
                        appTheme: "@style/Theme1"
                ]
            }

            flavor2 {
                dimension "theme"
                manifestPlaceholders = [
                        appTheme: "@style/Theme2"
                ]
            }
    }

manifest.xml

 <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan"
            android:theme="${appTheme}" >

这工作正常,根据所选的构建变体,应用不同的主题。

现在我要集成 Stripe SDK 声明一个名为 StripeDefaultTheme 的 Style。

在这种风格中,我想用我自己的主题的值覆盖 colorPrimarycolorAccent

是否可以为由 Build Variant 确定的样式声明父级?

Theme1 和 Theme2 可能有共同的 BaseTheme,您可以在 flavor res 目录 styles.xml 文件中覆盖它。

您可以只拥有一个根据不同风格而变化的主题,而不是制作两个单独的主题。为此,您只需覆盖相应风格的源集中的 styles.xml 文件。例如,

  1. 主源集中的AppTheme应该只包含条纹相关的主题,

    {app_module_dir}/src/main/res/values/styles.xml

    <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Stripe related values here. -->
    </style>
    

  2. 将 Theme1 的内容复制到 flavor1 的源集中

    {app_module_dir}/src/flavor1/res/values/styles.xml

    <style name="AppTheme" parent="BaseAppTheme">
        <!-- Theme1 contents here. -->
    </style>
    

  3. 将 Theme2 的内容复制到 flavor2 的源集中

    {app_module_dir}/src/flavor2/res/values/styles.xml

    <style name="AppTheme" parent="BaseAppTheme">
        <!-- Theme2 contents here. -->
    </style>
    

万年节

<activity
    ...
    android:theme="@style/AppTheme" >

build.gradle

productFlavors {
        flavor1 {
            dimension "theme"
        }

        flavor2 {
            dimension "theme"
        }
}