从主题中检索时颜色重音错误

Wrong colorAccent when retrieving from theme

我想使用应用程序主题中的 colorAccent。有两个具有不同强调色的主题。我用这段代码实现它:

样式:

<style name="BaseAppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppGreenTheme" parent="BaseAppTheme">
    <item name="colorAccent">@color/green</item>
</style>

<style name="AppRedTheme" parent="BaseAppTheme">
    <item name="colorAccent">@color/red</item>
</style>

布局:

<FrameLayout
    android:id="@+id/receives_funds_share"
    android:background="?colorAccent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

但它显示错误的颜色 (#04dac6)。当正确的颜色较深时 (#05c0a5)。

当我将它从 android:background="?colorAccent" 更改为 android:background="@color/green" 时,效果很好。有什么区别?如何从样式中正确获取 accentColor?

测试于 Android 11.

您应该将主题设置为 mainfest.xml 中的 activity:

<activity
    android:name=".activities.MainActivity"
    android:theme="@style/AppGreenTheme">
</activity>

事实是,由于您将 Theme.MaterialComponents.Light.DarkActionBar 用作 parent,因此 colorAccent 不适用。而是尝试将其替换为 colorSecondary,如下所示。

Theme.MaterialComponents 使用 colorSecondary 并在他们的文档中进行了描述。库中定义的所有组件都使用此属性。

<style name="BaseAppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppGreenTheme" parent="BaseAppTheme">
    <item name="colorSecondary">@color/green</item>
</style>

<style name="AppRedTheme" parent="BaseAppTheme">
    <item name="colorSecondary">@color/red</item>
</style>