Переопределение пользовательского атрибута во вкусе, ссылаясь на другой стиль - PullRequest
0 голосов
/ 04 декабря 2018

В моем модуле два атрибута cardStyle определены в одном файле следующим образом:

-> module / src / main / res / values ​​/ styles.xml

<declare-styleable name="customAttr">
    <attr name="cardStyle" format="reference" />
    <attr name="settingsCardStyle" format="reference" />
</declare-styleable>
<style name="CardStyle" parent="CardView">
    <item name="cardCornerRadius">0dp</item>
    <item name="cardElevation">0dp</item>
    <item name="android:layout_marginEnd">0dp</item>
    <item name="android:layout_marginStart">0dp</item>
    <item name="android:layout_marginTop">0dp</item>
    <item name="android:layout_marginBottom">0dp</item>
</style>
<style name="SettingsCardStyle" parent="CardView">
    <item name="android:layout_marginEnd">16dp</item>
    <item name="android:layout_marginStart">16dp</item>
    <item name="android:layout_marginTop">16dp</item>
    <item name="android:layout_marginBottom">59dp</item>
</style>

После этого я хочу переопределить settingsCardStyle, ссылаясь на cardStyle в моем аромате, который находится в компоненте моего приложения:

-> app / src / flavour / res / values ​​/ styles.xml

<style name="CardStyle" parent="CardView">
    <item name="cardCornerRadius">8dp</item>
    <item name="cardElevation">6dp</item>
    <item name="android:layout_marginEnd">16dp</item>
    <item name="android:layout_marginStart">16dp</item>
    <item name="android:layout_marginTop">10dp</item>
    <item name="android:layout_marginBottom">10dp</item>
</style>
<style name="SettingsCardStyle">
    <item name="cardStyle">@style/CardStyle</item>
    //using the following, the style works but it is redundant.
    <!--<item name="cardCornerRadius">8dp</item>-->
    <!--<item name="cardElevation">6dp</item>-->
    <!--<item name="android:layout_marginEnd">16dp</item>-->
    <!--<item name="android:layout_marginStart">16dp</item>-->
    <!--<item name="android:layout_marginTop">10dp</item>-->
    <!--<item name="android:layout_marginBottom">10dp</item>-->
</style>

Я должен упомянуть, что у меня есть CommonTheme, как показано ниже:

-> app / src / main / res / values ​​/ styles.xml

<style name="CommonTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:fontFamily">@font/open_sans</item>
    <item name="fontFamily">@font/open_sans</item>
    <item name="cardStyle">@style/CardStyle</item>
    <item name="settingsCardStyle">@style/SettingsCardStyle</item>
</style>

Но это не работает,Основное приложение распознает стиль в модуле, но ароматизированное приложение не ...

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я нашел решение своей проблемы!Решение состоит в том, чтобы использовать наследование, скорее ссылаясь на другой стиль.

<style name="CardStyle" parent="CardView">
    <item name="cardCornerRadius">8dp</item>
    <item name="cardElevation">6dp</item>
    <item name="android:layout_marginEnd">16dp</item>
    <item name="android:layout_marginStart">16dp</item>
    <item name="android:layout_marginTop">10dp</item>
    <item name="android:layout_marginBottom">10dp</item>
</style>

<style name="SettingsCardStyle" parent="CardStyle">
0 голосов
/ 04 декабря 2018

Итак, вы хотите переопределить стиль из аромата:

Спецификаторы ресурса позволяют это в app/src/flavor1/res и т. Д.

СТАРЫЙ ОТВЕТ (относительно модулей, а не ароматов)

Чтобы разделить стиль между модулями, я использую промежуточный:

common:

<style name="_CardStyle" parent="CardView"></style>

module1 (зависит от общего):

<style name="CardStyle" parent="_CardStyle"></style>

module2 (зависит от общего):

<style name="CardStyle" parent="_CardStyle"></style>

Теперь вы можете использовать CardStyle в своих модулях.

...