我正在开发一个 Android 应用程序,我想在 DetailFragment 中更改状态栏透明度。我已经实现了一个函数透明StatusBar来实现这一点。当我在DetailFragment中调用transparentStatusBar(true)时,状态栏变得透明,但是当我按下返回按钮返回到上一个片段时,bottomNavigationView的高度会变得混乱。
这是透明StatusBar函数的代码:
fun Activity.transparentStatusBar(transparent: Boolean) {
if (transparent) {
WindowCompat.setDecorFitsSystemWindows(window, false)
window.statusBarColor = Color.TRANSPARENT
} else {
WindowCompat.setDecorFitsSystemWindows(window, true)
window.statusBarColor = Color.parseColor("#F8FDFF")
}
}
在 DetailFragment 中,我这样称呼它:
requireActivity().transparentStatusBar(true)
这是底部NavigationView之前和之后的屏幕截图:
似乎设置 WindowCompat.setDecorFitsSystemWindows(window, false) 导致了该问题。在更改 DetailFragment 中的状态栏透明度时,如何防止此问题并保持正确的 BottomNavigationView 高度?
任何见解或建议将不胜感激。谢谢!
将状态栏和导航栏更改为透明后,我遇到了与您相同的问题,我通过减少bottomNaviagtionView的底部填充解决了这个问题。
binding.bottomNavigationView.post(() -> {
int start = binding.bottomNavigationView.getPaddingStart();
int top = binding.bottomNavigationView.getPaddingTop();
int end = binding.bottomNavigationView.getPaddingEnd();
int bottom = binding.bottomNavigationView.getPaddingBottom();
binding.bottomNavigationView.setPadding(start, top, end, bottom - getNavigationBarHeight(this));
});
这是获取导航栏高度的方法。
public int getNavigationBarHeight() {
int navigationBarHeight = 0;
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
navigationBarHeight = getResources().getDimensionPixelSize(resourceId);
}
return navigationBarHeight;
}