小编Ell*_*Zou的帖子

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

我想在我的APP中实现夜间模式(手动切换日夜模式),我了解到我可以使用UiModeManager.setNightMode()并添加一些资源,values-night并将drawable-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);
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

您有任何想法禁用此通知吗?

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

PS:我想知道为什么我们需要在设置夜间模式之前启用汽车模式.这有什么深刻的考虑吗?

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

PPPS:如果UiModeManager.setNightMode并且change theme既不是实施夜间模式的最佳方式,我还有什么选择?

编辑:

方法1: UiModeManager.setNightMode

在此输入图像描述

方法2: change theme

在此输入图像描述

再次编辑:

我认为我的想法是错误的.禁用通知没有意义,但允许汽车模式.

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

最后

使用UiModeManager.setNightMode和启用汽车模式不是实现夜间模式的好方法.因为它在Android 5.0及更高版本中产生了一些效果.

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

启动Android Auto

在汽车的显示屏上查找Android Auto按钮即可启动

在此输入图像描述

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

除了启用汽车模式,结果是完美的,对于开发人员,它可以只是制作一些文件夹drawable-night,values-night而不需要更改太多的代码.模式更改时,它会发送广播并将系统配置切换到适当的UI模式.

虽然有很多好处,但夜间模式是错误的.

我仍然想知道为什么汽车模式和夜间模式如此紧密结合.

android

7
推荐指数
1
解决办法
9905
查看次数

如何使用 KotlinPoet 生成“by Lazy”

我想生成这样的代码:

class B private constructor() : A {

    companion object {
        val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            B()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 KotlinPoet:

private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
        .addProperty(PropertySpec.builder("instance", A::class.java).build()).build()
Run Code Online (Sandbox Code Playgroud)

如何生成by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)我在文档中找不到一些有用的API 。

kotlin kotlinpoet

2
推荐指数
1
解决办法
811
查看次数

标签 统计

android ×1

kotlin ×1

kotlinpoet ×1