如何通过 styles/theme 将 colorControl* 属性仅应用于工具栏而不影响剩余项目样式

How to apply colorControl* attributes only to the Toolbar via styles/theme without affecting remaing item styles

我试图在不影响应用程序其余部分的情况下更改工具栏中按钮的颜色及其波纹,但无论我尝试多少种不同的方法,样式 "breaks" 中的某些内容。 =19=]

到目前为止,我通过在我的应用程序的根主题中设置 colorControlNormalcolorControlHighlight 获得了最好的结果(因为它破坏了其他样式最少),但是任何其他图标为它们的色调设置 ?colorControlNormal 也将继承此更改以及任何 ?selectableItemBackgroundBorderless 和滚动条的颜色。

以前的尝试导致更差的结果(或根本没有结果)计入通过应用主题定义工具栏样式:

<item name="toolbarStyle">@style/ToolbarStyle</item>

并在工具栏样式中定义 colorControl* 属性

<style name="ToolbarStyle" parent="Widget.AppCompat.Toolbar">
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlHighlight">@color/blue</item>
</style>

毫无结果

另一种尝试是直接在工具栏视图中通过主题属性进行的:

<androidx.appcompat.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ToolbarStyle"/>

得到了我想要的结果,但也比我想要的改变了很多;标题 + 副标题的高度与工具栏的高度相同,因为 android:minHeight 不再被覆盖,但是如果我在样式中覆盖 属性 那么搜索视图将失去它的垂直对齐方式,后面按钮失去了它的高度,等等。我最终无法单独通过 theme/style 修复任何其他问题。

所以现在我在文档中没有任何关于如何在不影响其他任何东西的情况下仅更改工具栏中的图标颜色和它们各自的波纹颜色的线索,有没有人知道如何做到这一点而不必诉诸以编程方式进行?

样式的继承不允许这种情况发生。以编程方式执行此操作的唯一方法。