为什么Android会将我的一些绘图工具转换为黑暗主题(夜晚),而不是其他?

为什么Android会将我的一些绘图工具转换为黑暗主题(夜晚),而不是其他?,android,android-dark-theme,Android,Android Dark Theme,我的应用程序使用主题.AppCompat.DayNight.NoActionBarAppTheme,并且有一个导航抽屉。我所有的绘图都是XML向量,其中的路径是黑色的。对于我的sidenav菜单中的这些可绘制内容的使用,Android或SDK中的某个地方反转了可绘制内容,这样我的路径实际上是白色的(或者接近白色的颜色,可能实际上是colorAccent)。这很好 但是,当我将同一个绘图工具作为菜单项放在动作栏中时,它并没有反转,仍然使用黑色路径。怎么会?我怎样才能让同样的魔法发生在那里 主题:

我的应用程序使用
主题.AppCompat.DayNight.NoActionBar
AppTheme
,并且有一个导航抽屉。我所有的绘图都是XML向量,其中的路径是黑色的。对于我的sidenav菜单中的这些可绘制内容的使用,Android或SDK中的某个地方反转了可绘制内容,这样我的路径实际上是白色的(或者接近白色的颜色,可能实际上是
colorAccent
)。这很好

但是,当我将同一个绘图工具作为菜单项放在动作栏中时,它并没有反转,仍然使用黑色路径。怎么会?我怎样才能让同样的魔法发生在那里

主题:

<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorAccent">@color/primaryTextColor</item>
    <item name="android:navigationBarColor">#00000000</item>
</style>
下面是我如何膨胀菜单并处理从片段切换书签的方式(一个
ToggleButton
似乎不能节省我的工作):

侧导航图标,反转(良好):

操作栏图标,未反转(错误):


我99%确信AppCompat的工具栏或至少MaterialToolbar会自动使用主题属性着色,但它看起来不像

要回答您的问题“为什么Android会将我的一些可绘制内容转换为黑暗主题(夜晚),而不是其他内容?”,这是因为使用可绘制内容的组件不会使用主题属性着色


有几种方法可以实现你想要的。这些都假设您希望它是
colorControlNormal
,否则选择您喜欢的颜色属性

colorControlNormal
在AppCompat(深灰色)中有默认值,而在
values night
变体中它是白色的(您可以通过使用DayNight主题获得)

在矢量绘图窗口中设置图标色调

这可能会产生一种潜在的不良效果,即在您正在使用它的其他地方对该绘图布进行着色(取决于其他地方是否应用了自己的着色)

在菜单中设置图标色调


如果已设置,此选项将覆盖绘图表中的色调。

您可以共享您的主题吗?您在主题中设置了colorControlNormal吗?你能分享一下你是如何设置图标的以及你使用了什么样的操作栏吗?@ataulm当然,给你。我在任何地方都不会设置颜色控制。谢谢!我把它设置在矢量绘图中。
<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <item android:id="@+id/bookmarkAction"
        android:title="@string/bookmark"
        android:icon="@drawable/ic_bookmark_off"
        app:showAsAction="always"
        tools:ignore="AlwaysShowAction" />
</menu>
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    inflater.inflate(R.menu.action_bar, menu)
    super.onCreateOptionsMenu(menu, inflater)
}

// Swap out the bookmark icon in the options menu depending
// on whether this command is bookmarked or not.
override fun onPrepareOptionsMenu(menu: Menu) {
    super.onPrepareOptionsMenu(menu)

    val bookmarkMenuItem = menu.getItem(0)
    val commandName = viewModel.command.value?.name

    if (model?.bookmarkedCommands?.contains(commandName)!!) {
        Log.v(logTag, "${commandName} is bookmarked")

        bookmarkMenuItem?.icon = ContextCompat.getDrawable(requireContext(),
            R.drawable.ic_bookmark_on)
    }
    else {
        Log.v(logTag, "${commandName} is not bookmarked")

        bookmarkMenuItem?.icon = ContextCompat.getDrawable(requireContext(),
            R.drawable.ic_bookmark_off)
    }
}