android - 在通知区域中监听 "Dark Theme"切换并收到更改通知

标签 android android-theme android-10.0

我可以得到UI_MODE_NIGHT_MASK调用 resources.configuration.uiModeConfiguration.UI_MODE_NIGHT_MASK .
我需要听这个变量并在接收新值时改变我的主题。
我想我可以添加一个 BroadcastReceiver所以我可以做一个getSystemService(A_CONSTANT_FROM_Context)并注册一个类似于 ConnectivityManager.NetworkCallback 的主题回调.但我只在文档中找到了这些:扩展 Theme.MaterialComponents.DayNight在我的主题风格和拥有values-night .问题 dark them config已经有一个公认的答案是指这个文档。

最佳答案

了解uiMode更改添加 configChanges AndroidManifest.xml 中的属性:

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

然后在您的 Activity 中监听配置更改:
public class YourActivity extends AppCompatActivity {

    protected Configuration mPrevConfig;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        mPrevConfig = new Configuration(getResources().getConfiguration());
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        configurationChanged(newConfig);
        mPrevConfig = new Configuration(newConfig);
    }

    protected void configurationChanged(Configuration newConfig) {
        if (isNightConfigChanged(newConfig)) { // night mode has changed
            recreate();
            // do your thing
        }
    }

    protected boolean isNightConfigChanged(Configuration newConfig) {
        return (newConfig.diff(mPrevConfig) & ActivityInfo.CONFIG_UI_MODE) != 0 && isOnDarkMode(newConfig) != isOnDarkMode(mPrevConfig);
    }
    public static boolean isOnDarkMode(Configuration configuration) {
        return (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
    }
}

关于android - 在通知区域中监听 "Dark Theme"切换并收到更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694023/

相关文章:

Android:找出哪个字体文件适合我要显示的字符

android - 如何覆盖具有自己 Activity 的库的样式

android - 在启动画面中心裁剪背景图像

android - Lollipop 进度条着色

android - java.io.IOException : No such file or directory (save image)

java - 将自定义形状应用于 Android ListView

java - 为什么这个 postDelayed 不会永远运行?

javascript - 如何提高 Monocle 电子阅读器库的滚动速度?

安卓 Q : background activity starts

android - Android Q 中引入的 ACCESS_BACKGROUND_LOCATION 如何影响 Geofence API?