我已經用盡了關於以編程方式更改狀態欄顏色的每篇文章,但其中沒有一篇涉及此特定情況。Android - 在Viewpager中的片段之間切換狀態欄透明度
我有一個Activity包含一個ViewPager和一個BottomNavigationView。 ViewPager持有三個碎片,BottomNavigationView在平滑滾動關閉的情況下在它們之間移動。
由於三個碎片中的第一個是地圖,我希望狀態欄在顯示第一個碎片時是透明的,但在其他兩個碎片上恢復爲其不透明顏色。
下面是一些代碼,顯示了我試圖設置和恢復狀態欄狀態。
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
試過沒有產生我想要的結果。
如果任何人有任何建議,你會給每個片段一個單獨的狀態欄顏色,1是透明的,我真的很感激它。