要实现根据主题更改状态栏文本颜色的效果,可以使用以下方法:
首先,需要在style.xml文件中为状态栏定义不同的主题样式,例如:
上面的代码片段定义了两个主题样式,分别是AppTheme和AppTheme.Dark。其中,android:statusBarColor属性用于设置状态栏的背景色,android:windowLightStatusBar属性用于决定状态栏的文本颜色是否为浅色。
然后,在Activity或Fragment中通过代码动态地切换主题,例如:
private void setTheme(boolean isDarkTheme) {
int themeResId = isDarkTheme ? R.style.AppTheme_Dark : R.style.AppTheme;
setTheme(themeResId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Window window = getWindow();
int flags = window.getDecorView().getSystemUiVisibility();
if (isDarkTheme) {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
} else {
window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
window.getDecorView().setSystemUiVisibility(flags);
}
}
上面的方法使用了setTheme()方法来动态设置主题,根据isDarkTheme的值来决定使用哪一个主题。然后,通过getWindow()方法获取Window对象,