Родительский стиль в зависимости от варианта сборки - PullRequest
1 голос
/ 22 октября 2019

У меня есть две темы, определенные в themes.xml.

Эти две темы применяются в манифесте через productFlavors:

build.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 .

В этом стиле я хочу переопределить colorPrimary и colorAccent значениями своих собственных тем.

Можно ли объявить родителя для стиля, который определенпо варианту сборки?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вместо создания двух отдельных тем, у вас может быть только одна тема, которая варьируется в зависимости от разных вкусов. Для этого вам просто нужно переопределить файлы 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 в исходный набор flav1

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

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

  3. Копироватьсодержимое Theme2 в исходный набор flav2

    {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"
        }
}
1 голос
/ 23 октября 2019

Theme1 & Theme2 может иметь общую BaseTheme, которую можно переопределить в файле flavour d d styles styles.xml.

...