【问题标题】:Changing Material Components style attributes fails更改材质组件样式属性失败
【发布时间】:2019-03-10 07:29:04
【问题描述】:

我正在尝试更改 Material Components Theme 的样式属性(如 colorPrimaryVariant、colorOnSecondary 等),但出现以下错误:

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 主题,但我得到了同样的错误。我仔细检查了我的依赖项,一切似乎都是正确的。我错过了什么?

【问题讨论】:

  • 似乎他们使用了Theme.AppCompat,如果您仔细read it,我认为它可以与AppCompat 主题一起使用,这些是AppCompat 的新属性来测试而不是Theme.MaterialComponents : 您还可以增量测试新的 Material 组件而不更改您的应用主题

标签: android android-theme material-components material-components-android


【解决方案1】:

看起来 1.1.0(目前处于 alpha 阶段)已经解决了这个问题:

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

【讨论】:

【解决方案2】:

我刚刚检查了the documentation 和您使用的项目。似乎它仍未添加到 Theme.MaterialComponents 中,也不适用于该主题。

(也出现了 Not found 错误(通过使用 Theme.MaterialComponents)

有趣的是,我相信它应该与parent="Theme.AppCompat" 一起使用,因为他们说这是为了测试它是如何工作的:

您也可以增量测试新的材料组件没有 更改您的应用主题。 这允许您保留现有的布局 外观和行为相同,同时引入新组件 你的布局一次一个。

阅读: AppCompat Themes

【讨论】:

  • 我试过了,但不幸的是得到了相同的结果。但是我发现这个问题只影响颜色属性。文档中提到的所有“textAppearance”属性和“scrimBackground”属性都可以正常工作(使用“Theme.MaterialComponents”和“Theme.AppCompat”)。是不是还不能改颜色?
  • 是的,你是对的。所有这些文本属性在我这边也可以正常工作,但似乎这些颜色属性将在新的更新或类似的东西中可用。但是,我想知道他们为什么要介绍这些内容并编写文档以在 AppCompat 和现在使用这些内容。它找不到那些属性。听起来像是一个错误,或者至少,我们需要来自可靠的 Google 来源的解释。
  • 环顾四周后,我发现this file 缺少颜色,而相应的排版文件包含所有 textAppearance 属性。所以我认为你是对的,这些属性由于任何原因尚未公开。
  • 嗯,是的。我已经检查了那些没有这些颜色属性的文件。这就是为什么我说它可能会在下一次未来的更新中添加。 :)
  • 你说得对,这些颜色属性还不存在,也没有任何东西在使用它们。它应该在本月底以库的 alpha 版本发布。
猜你喜欢
  • 2018-10-08
  • 2015-12-11
  • 2016-07-13
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多