我的应用程序使用了Theme.AppCompat.DayNight.NoActionBar
AppTheme
,并且有一个导航抽屉。我所有的可绘制对象都是XML矢量图,并且它们中的路径是黑色的。对于这些可绘制对象的用途,在我的侧边栏菜单中,Android或SDK中某个地方已经将可绘制对象反转,使得路径实际上是白色的(或者接近白色的颜色,可能实际上是colorAccent
)。这很好。
但是当我自己将相同的可绘制对象放置在操作栏中作为菜单项时,它没有被反转,仍然使用黑色路径。这是怎么回事?我如何让同样的魔法在那里发生?
主题:
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorAccent">@color/primaryTextColor</item>
<item name="android:navigationBarColor">#00000000</item>
</style>
主活动布局中的操作栏:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
menu/action_bar.xml
:
<?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>
以下是我如何展开菜单并处理片段中书签的切换(在这里ToggleButton
似乎不会为我节省任何工作):
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)
}
}
侧边栏图标反色(好):
动作栏图标未反色(不好):