【发布时间】:2017-12-03 13:50:00
【问题描述】:
我基本上已经用尽了我发现的每一篇关于以编程方式更改状态栏颜色的帖子,但没有一篇涉及这个具体案例。
我有一个包含 ViewPager 和 BottomNavigationView 的 Activity。 ViewPager 包含三个 Fragment,BottomNavigationView 在它们之间移动,平滑滚动关闭。
由于三个 Fragment 中的第一个是地图,我希望在显示第一个 Fragment 时状态栏是透明的,但在其他两个 Fragment 上恢复为不透明颜色。
这里有一些代码显示了我如何尝试设置和恢复状态栏状态。
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);
}
Here's a gif showing the behavior I end up with
我用fitSystemWindows 尝试的每件事都没有产生我想要的结果。
如果有人对如何为每个 Fragment 赋予单独的状态栏颜色有任何建议,其中 1 是透明的,我将不胜感激。
【问题讨论】:
标签: android android-fragments transparency statusbar