Makru
Makru

Reputation: 507

Changing Material Components style attributes fails

I am trying to change the style attributes from the Material Components Theme (like colorPrimaryVariant, colorOnSecondary and so on) but I get the following error:

Android resource linking failed
Output:      C:\...\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3835: error: style attribute 'attr/colorPrimaryVariant (aka com.sample.app:attr/colorPrimaryVariant)' not found.
C:\...\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3836: error: style attribute 'attr/colorOnPrimary (aka com.sample.app:attr/colorOnPrimary)' not found.
C:\...\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3839: error: style attribute 'attr/colorSecondaryVariant (aka com.sample.app:attr/colorSecondaryVariant)' not found.
C:\...\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3840: error: style attribute 'attr/colorOnSecondary (aka com.sample.app:attr/colorOnSecondary)' not found.
error: failed linking references.

This is what my theme looks like:

<resources>

    <!-- Light application theme -->
    <style name="CBTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <item name="colorPrimary">@color/cbPrimary</item>
        <item name="colorPrimaryDark">@color/cbPrimaryDark</item>
        <item name="colorPrimaryVariant">@color/cbPrimaryDark</item>
        <item name="colorOnPrimary">#FFFFFF</item>
        <item name="colorAccent">@color/cbAccent</item>
        <item name="colorSecondary">@color/cbAccent</item>
        <item name="colorSecondaryVariant">@color/cbAccentLight</item>
        <item name="colorOnSecondary">#FFFFFF</item>
        <item name="colorError">@color/cbRed</item>

        <item name="android:windowBackground">@color/lightThemeBackground1</item>
    </style>

    [...]

</resources>

If I don't add the four affected attributes everything works fine. My minSdkVersion is 16, compileSdkVersion and targetSdkVersion are 28. I also tried to use the Bridge themes but I get the same error. I double-checked my dependencies and everything seems correct. What am I missing?

Upvotes: 28

Views: 16718

Answers (3)

b y f hc
b y f hc

Reputation: 51

colorSurface is used for “sheets” of material (like cards and bottom sheets).

You don’t have to override all colors. Some, such as colorSurface, use neutral colors so relying on the default values is perfectly fine.

Resource : https://material.io/blog/android-material-theme-color

Upvotes: 0

and_dev
and_dev

Reputation: 3861

It looks like 1.1.0 (currently in alpha) has resolved this issue:

implementation 'com.google.android.material:material:1.1.0-alpha09'

Upvotes: 44

ʍѳђઽ૯ท
ʍѳђઽ૯ท

Reputation: 16976

I have just checked the documentation and the items you used. It seems like it is still not added to the Theme.MaterialComponents nor it doesn't work with that theme.

(got the Not found error (by using Theme.MaterialComponents) too)

The interesting part is, I believe it should work with parent="Theme.AppCompat" since they said it is for the test to see how it works:

You can also incrementally test new Material components without changing your app theme. This allows you to keep your existing layouts looking and behaving the same, while introducing new components to your layout one at a time.

Read: AppCompat Themes

Upvotes: 2

Related Questions