gpt4 book ai didi

android - 要实现 Android 夜间模式,使用 UiModeManager 并启用汽车模式,但显示通知,这可能不是好方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:02 28 4
gpt4 key购买 nike

我想在我的APP中实现夜间模式(手动切换白天和夜间模式),我了解到我可以使用UiModeManager.setNightMode()并添加一些资源如values- nightdrawable-night 来归档它。

在文档中,在setNightMode()之前,我们需要enableCarMode()

使用下面的代码可以工作,但问题出现了。

UiModeManager uiManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);
if (isNightMode) {
uiManager.enableCarMode(0);
uiManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
} else {
uiManager.disableCarMode(0);
uiManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
}

它显示允许用户退出汽车模式的通知。

enter image description here

您有什么想法可以禁用此通知吗?

或者这些只是意味着它不是实现 android 夜间模式的最佳方式。启用汽车模式会对我的应用程序或手机产生任何奇怪的影响吗?

PS:我想知道为什么我们需要在设置夜间模式之前启用汽车模式。有没有深思熟虑?

PPS:我已经知道我可以改变主题来切换日夜模式。它需要调用 this.recreate() 并导致屏幕闪烁一秒钟。

PPPS:如果 UiModeManager.setNightModechange theme 都不是实现夜间模式的最佳方式,我还有什么选择?

编辑:

方法一:UiModeManager.setNightMode

enter image description here

方法二:改变主题

enter image description here

再次编辑:

我觉得我的想法是错误的。禁用通知没有意义,但允许汽车模式。

我想要的只是像方法 1 一样实现夜间模式,而不设置桌面或汽车模式之类的东西,不显示闪烁。

最后

使用 UiModeManager.setNightMode 并启用汽车模式并不是实现夜间模式的好方法。因为它在Android 5.0及以上版本有一定效果。

当启用汽车模式且应用程序正在运行时,我按下主页按钮,发生了一些奇怪的事情(在 nexus 7 Android 5.1.1 中测试)。如下图所示:

Launch Android Auto

Look for the Android Auto button on your car's display to start

enter image description here

不幸的是,除非需要汽车模式,否则无法使用 UiModeManager.setNightMode

除了启用汽车模式外,结果是完美的,对于开发人员来说,它可以在不更改太多代码的情况下制作一些文件夹,如 drawable-nightvalues-night。当模式改变时,它发送广播并将系统配置切换到适当的 UI 模式。

虽然好处多多,但是夜间模式的错误做法

我还是想知道为什么车载模式和夜间模式结合得如此紧密。

最佳答案

感谢NightModeHelper ,我完成了这个功能。

MainActivity.onCreate() 中,初始化 NightModeHelper。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNightModeHelper = new NightModeHelper(this, R.style.Theme_Idxyer_NoActionBar);
}

在你需要切换模式的地方,添加下面一行。

mNightModeHelper.toggle();

此外,values-night 还需要有 color.xml

这一切都可以像改变主题的方法一样工作,显示闪烁。

如果您不喜欢闪烁,可以尝试setContentView(R.layout.main) 并再次初始化 View 。不要忘记删除 NightModeHelper 类中的 activity.recreate()

但是如果MainActivity包含fragment,则需要重新添加fragment,fragment会闪烁。

可以查看demo in Github获取源代码。

----编辑------

在 Android 支持库 23.2 及更高版本中,官方支持夜间模式。

关于android - 要实现 Android 夜间模式,使用 UiModeManager 并启用汽车模式,但显示通知,这可能不是好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31934503/

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