我的应用程序使用Theme.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>
主活动布局中的操作栏:
<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>
以下是我如何膨胀菜单并处理片段中书签的切换(aToggleButton
似乎不会在这里为我节省任何工作):
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)
}
}
Sidenav 图标,倒置(好):
操作栏图标,未倒置(坏):