17

我正在尝试为我的 Android 应用程序支持 Android Q Dark 主题,但我不知道如何根据我当前所在的主题导入不同的资产。

我使用官方 DayNight 主题来制作深色/浅色版本,并且对于可绘制对象非常容易指向 XML,它会根据启用的内容从 values 或 values-night 中选择正确的值。

我想做类似的事情,根据主题它会加载资产“priceTag_light.png”或“priceTag_dark.png”。

val inputStream = if(darkIsEnabled) { 
                    assets.open("priceTag_dark.png")
                  } else {
                    assets.open("priceTag_light.png")
                  }

有没有办法得到那面旗帜?

4

3 回答 3

24

好的,终于找到了我正在寻找的解决方案。正如@deepak-s-gavkar指出的那样,该参数为我们提供了有关配置的信息。所以,经过小小的搜索,我发现这篇文章给出了这个示例方法,它非常适合我想要的:

fun isDarkTheme(activity: Activity): Boolean {
        return activity.resources.configuration.uiMode and
                Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
    }
于 2019-08-28T07:22:53.587 回答
5

您首先需要在清单中进行此更改

<activity
    android:name=".MyActivity"
    android:configChanges="uiMode" />

然后 onConfigurationChanged 活动

val currentNightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (currentNightMode) {
    Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme
    Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme
}
于 2019-08-28T04:31:48.160 回答
3

使用以下代码:

boolean isDarkThemeOn = (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)  == Configuration.UI_MODE_NIGHT_YES;
于 2021-03-06T16:24:18.320 回答