【问题标题】:Material components not using color accent declared in theme不使用主题中声明的颜色重音的材质组件
【发布时间】:2019-02-25 20:10:16
【问题描述】:

我的主要应用主题父级是 MaterialComponents 主题。我更改了颜色,但材质组件(MaterialButton、InputLayout、EditText)没有使用我的强调色(它们使用了一些蓝色,我声明的强调色是青色) 问题是什么?处理主题材质组件的最佳方式是什么?

我的主题:

    <style name="AppTheme" parent="Theme.MaterialComponents">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

编辑: 将主题更改为 Theme.MaterialComponents.Bridge 并不能解决该问题。

【问题讨论】:

  • 你的 @color/colorPrimary@color/colorPrimaryDark 是蓝色的吗?
  • 在使用 MaterialComponents 时不应该使用 MaterialButton, MaterialXxx 而不是 Button, Xxx?
  • 抱歉,我不清楚。我的颜色口音是蓝绿色。我正在使用材质组件:材质按钮

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


【解决方案1】:

对于那些尝试使用从Theme.MaterialComponents.* 继承的主题的人,请记住不要使用常规的Button 类,而是使用com.google.android.material.button.MaterialButton

代替:

<Button
  (...)
  style="@style/Widget.MaterialComponents.Button" />

请务必使用:

<com.google.android.material.button.MaterialButton
  (...)
  style="@style/Widget.MaterialComponents.Button" />

去过那里。没什么好丢脸的。 :)

【讨论】:

    【解决方案2】:

    在我的情况下,问题是为特定 API 声明了不同的 styles.xml。我在其中犯了一个错误,并且在测试时,在styles.xml之前应用了其他values-v21/styles.xml

    长话短说,检查其他变体中是否不存在错误。我声明那个变种是错误的。

    【讨论】:

      【解决方案3】:

      也许你应该尝试使用colorSecondary 而不是colorAccent

       <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
          <!-- Original AppCompat attributes. -->
          <item name="colorPrimary">@color/colorPrimary</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorSecondary">@color/colorAccent</item>
      </style>
      

      这对我有用

      【讨论】:

        【解决方案4】:

        尝试像这样更改您的styles.xml:

            <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
                <item name="colorPrimary">@color/colorPrimary</item>
                <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
                <item name="colorAccent">@color/colorAccent</item>
            </style>
        

        如果可行,请告诉我

        编辑:尝试点击此链接设置材料组件https://medium.com/@pedromassango/android-material-design-components-setup-google-i-o18-part-1-8894f315b5e

        【讨论】:

        • 它不起作用,我尝试了几个变体,以及 Bridge 变体。我想我需要覆盖更多属性
        【解决方案5】:

        Theme.AppCompat 继承您的应用主题,例如:

        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            ...
        </style>
        

        请注意,您可以选择深色或浅色主题,但您需要扩展 Theme.AppCompat

        【讨论】:

        • 你的意思是我应该使用那个主题并声明缺少的属性吗?因为该主题没有 Material Components 的所有属性。
        • 是的,所有材质组件都使用在您的应用主题中声明的颜色,但它需要从Theme.AppCompat 继承,Android 正在寻找主题颜色,如colorAccentcolorPrimary。但不要忘记在 AndroidManifest 中使用您声明的主题,例如:&lt;application android:theme="@style/AppTheme"&gt;
        • 好的,我会尝试这种方法并提供反馈:)
        • 如果您实际使用的是 MaterialComponents,这将不起作用。它们依赖于从 MaterialComponents 主题继承。
        猜你喜欢
        • 2018-09-14
        • 2018-05-11
        • 2018-10-12
        • 2021-02-07
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多