android 中如何在白天模式下使用 values-night 下的同名资源
时间: 2024-03-06 09:48:07 浏览: 35
在 Android 中,如果在 `res/values` 和 `res/values-night` 目录下同时定义了同名的资源(如颜色、样式、尺寸等),并且在白天模式下想要使用 `res/values-night` 目录下的同名资源,可以使用以下方法:
1. 在代码中动态设置
可以在代码中通过 `getResources().getConfiguration().uiMode` 获取当前的 UI 模式,然后根据 UI 模式来动态加载对应的资源。具体示例代码如下:
```java
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
// 使用 res/values-night 目录下的同名资源
int color = getResources().getColor(R.color.my_color);
} else {
// 使用 res/values 目录下的同名资源
int color = getResources().getColor(R.color.my_color);
}
```
2. 使用 AppCompat 库
如果应用使用了 AppCompat 库,可以通过 `getDelegate().getLocalNightMode()` 获取当前的夜间模式设置,然后根据夜间模式设置来加载对应的资源。具体示例代码如下:
```java
int nightMode = AppCompatDelegate.getDefaultNightMode();
switch (nightMode) {
case AppCompatDelegate.MODE_NIGHT_YES:
// 使用 res/values-night 目录下的同名资源
int color = ContextCompat.getColor(this, R.color.my_color);
break;
case AppCompatDelegate.MODE_NIGHT_NO:
case AppCompatDelegate.MODE_NIGHT_UNSPECIFIED:
// 使用 res/values 目录下的同名资源
int color = ContextCompat.getColor(this, R.color.my_color);
break;
}
```
以上两种方法都可以实现在白天模式下使用 `res/values-night` 目录下的同名资源。