我已经研究了与以编程方式更改状态栏颜色相关的所有文章,但没有一个触及到这个特定案例。
我有一个包含ViewPager和BottomNavigationView的Activity。ViewPager包含三个Fragments,而BottomNavigationView在它们之间移动时关闭平滑滚动。
由于三个Fragments中的第一个是地图,当显示第一个Fragment时,我希望状态栏是透明的,但在其他两个Fragments上恢复为不透明的颜色。
以下是我尝试设置和恢复状态栏状态的代码。
private class TabSelectedObserver implements Observer<Integer> {
@Override
public void onChanged(@Nullable Integer selectedTab) {
if (selectedTab != null) {
activityMainBinding.mainPager.setCurrentItem(selectedTab, false);
switch (selectedTab) {
case 0:
applyTransparentStatusBarTheme();
break;
default:
applyOpaqueStatusBarTheme();
break;
}
}
}
}
private void applyTransparentStatusBarTheme() {
hideSystemUi();
getWindow().setStatusBarColor(ContextCompat.getColor(this, android.R.color.transparent));
}
private void applyOpaqueStatusBarTheme() {
showSystemUi();
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.rippallete_700));
}
private void hideSystemUi() {
// Set flags for hiding status bar and navigation bar
mSystemUiVisibility = mSystemUiVisibility
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
getWindow().getDecorView().setSystemUiVisibility(mSystemUiVisibility);
}
private void showSystemUi() {
// Reset flags for hiding status bar and navigation bar
mSystemUiVisibility = mSystemUiVisibility
& ~View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
getWindow().getDecorView().setSystemUiVisibility(mSystemUiVisibility);
}
我尝试使用fitSystemWindows
,但没有得到想要的结果。
如果有人有关于如何为每个片段设置不同的状态栏颜色的建议,其中1为透明,请告诉我,谢谢。