我可以得到UI_MODE_NIGHT_MASK
通过致电resources.configuration.uiMode
and Configuration.UI_MODE_NIGHT_MASK
.
我需要监听这个变量并在接收新值时更改我的主题。
我想我可以添加一个BroadcastReceiver
所以我可以做一个getSystemService(A_CONSTANT_FROM_Context)
并注册一个类似的主题回调ConnectivityManager.NetworkCallback
。但我只在文档中找到这些:Theme.MaterialComponents.DayNight
关于我的主题风格和values-night
。问题深色主题配置 https://stackoverflow.com/questions/57955769/dark-theme-configuration-change-in-android-q已经有一个被接受的答案引用了这个文档。
欲了解有关uiMode
更改添加configChanges
属性在你的AndroidManifest.xml
:
<application
...>
<activity
android:name=".YourActivity"
...
android:configChanges="uiMode"/>
</application>
然后在您的活动中监听配置更改:
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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)