android 更改材质组件样式属性失败

lymgl2op  于 2023-02-06  发布在  Android
关注(0)|答案(3)|浏览(167)

我尝试更改Material Components Theme的样式属性(如colorPrimaryVariantcolorOnSecondary等),但收到以下错误:

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.

这是我的主题看起来像:

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

如果我不添加这四个受影响的属性,一切都很好。我的minSdkVersion是16,compileSdkVersion和targetSdkVersion是28。我也尝试使用Bridge主题,但我得到了同样的错误。我仔细检查了依赖关系,一切似乎都是正确的。我错过了什么?

brjng4g3

brjng4g31#

看起来1.1.0(当前为alpha版本)已解决此问题:

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

mnemlml82#

我刚刚查了一下the documentation和你用过的 prop ,好像还没有加到Theme.MaterialComponents上,也不适合那个主题。

(也出现“未找到”错误(通过使用Theme.MaterialComponents))

有趣的是,我相信它应该可以与parent="Theme.AppCompat"一起工作,因为他们说这是为了测试看看它是如何工作的:
您还可以逐步测试新材质组件**,而无需更改应用主题**。* 这样,您可以保持现有布局的外观和行为不变,同时一次向布局中引入一个新组件。*

**阅读:**AppCompat主题

nkoocmlb

nkoocmlb3#

colorSurface用于材料的"片材"(如卡片和底部片材)。
你不需要覆盖所有的颜色,有些颜色,比如colorSurface,使用中性色,所以依赖默认值是完全可以的。
资源:https://material.io/blog/android-material-theme-color

相关问题