繁体   English   中英

Android AppCompatDelegate.setDefaultNightMode 不会在 android 9 中重新创建父活动

[英]Android AppCompatDelegate.setDefaultNightMode not recreating parent activity in android 9

您好,我正在使用此 AppCompatDelegate 在白天/夜晚主题之间进行更改我有 2 个活动 A& B 此代码从活动 B 调用它应该使用所选样式重新创建活动 B & A 这里是我的代码

 applyNight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isNight) { SharedPrefrencesMethods.savePreferences(this, getString(R.string.night_key), true); AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); } else { SharedPrefrencesMethods.savePreferences(this, getString(R.string.night_key), false); AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); } } });

我在 android 7 和 6 上对其进行了测试,它工作正常,即在活动 B 中更改模式并按回活动 A 重新创建新主题时。 在 android 9 上尝试时,它仅更改活动 B 而不会影响其父活动 A。

我也遇到了这个问题,然后在 Google 的官方 Android 开发者博客https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94 中听取了 Chris Banes 的建议,在应用程序的应用程序类中设置setDefaultNightMode首先,所以我创建了一个类 EcwgApplication 扩展应用程序,如他所示,并在清单的application部分添加了android:name=".EcwgApplication" 我还将我的切换主题的方法也放在应用程序类中,当用户更改主题设置时,我的设置活动可以调用(除了在调用它之前更新 SharedPreferences 与更改之前),所以它看起来像这样:

public class EcwgApplication extends Application {
    public void onCreate() {
        super.onCreate();

        int selectedDarkLightTheme = PreferenceManager.getDefaultSharedPreferences(this).getInt(getString(R.string.preferences_dark_light_mode_selected_key), AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
        AppCompatDelegate.setDefaultNightMode(selectedDarkLightTheme);
    }

    public static void setDarkLightTheme(int selectedDarkLightTheme) {
        AppCompatDelegate.setDefaultNightMode(selectedDarkLightTheme);
    }
}

这适用于 Android OS 版本 24 到 29,但是对于 21(此应用程序支持的最低版本)到 23,我会在返回第一个活动时出现黑屏,旋转屏幕可以解决这个问题,它也使清除未保存 UI 状态。 因此,我将设置屏幕的 StartActivity 更改为 StartActivityForResult,并在 onActivityResult 中检查版本号是否 <= 23,如果是,请执行this.recreate()

我需要继续做更多的测试,但至少到目前为止一切似乎都运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM