2

我在themes.xml.

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

构建.gradle

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

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

清单.xml

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

这可以正常工作,具体取决于选择的构建变体,应用不同的主题。

现在我想集成 Stripe SDK 女巫声明一个名为StripeDefaultTheme的样式。

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

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

4

2 回答 2

3

与其制作两个单独的主题,您可以只拥有一个主题,根据不同的口味而变化。为此,您只需覆盖相应风味源集中的 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" >

构建.gradle

productFlavors {
        flavor1 {
            dimension "theme"
        }

        flavor2 {
            dimension "theme"
        }
}
于 2019-10-23T10:46:02.200 回答
1

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

于 2019-10-23T10:10:03.513 回答