gpt4 book ai didi

android - 为什么 Android 将我的一些可绘制对象反转为深色主题(夜间)而不是其他对象?

转载 作者:行者123 更新时间:2023-12-03 16:59:29 27 4
gpt4 key购买 nike

我的应用程序使用 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>
主 Activity 布局中的操作栏:
<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>
以下是我如何膨胀菜单并处理 fragment 中书签的切换( 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)
}
}
Sidenav 图标,倒置(好):
sidenav
操作栏图标,未倒置(坏):
enter image description here

最佳答案

我 99% 确定 AppCompat 的工具栏或至少 MaterialToolbar 会自动使用主题属性着色,但它看起来不像。
要回答您的问题“为什么 Android 将我的一些可绘制对象反转为深色主题(夜间)而不是其他可绘制对象?”,这是因为使用可绘制对象的组件不使用主题属性进行着色。

有几种方法可以实现您想要的。这些都假设您希望它是 colorControlNormal ,否则选择您喜欢的任何颜色属性。colorControlNormal在 AppCompat 中具有默认值(深灰色),在 values-night 中为白色变体(您可以从使用 DayNight 主题中获得)。
在矢量可绘制对象中设置图标色调

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF00FF"
android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z" />
</vector>
这会产生潜在的不良影响,即在您正在使用它的其他地方着色此可绘制对象(取决于其他地方是否应用其自己的颜色)。
在菜单中设置图标色调
<?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:iconTint="?attr/colorControlNormal"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
</menu>
如果设置了一个,它将覆盖可绘制对象中的色调。

关于android - 为什么 Android 将我的一些可绘制对象反转为深色主题(夜间)而不是其他对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63008623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com