在 Android 应用材质 3 中更改状态栏透明度时,BottomNavigationView 高度问题

问题描述 投票:0回答:1

我正在开发一个 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之前和之后的屏幕截图:

bottomNavigationView before

bottomNavigationView next

似乎设置 WindowCompat.setDecorFitsSystemWindows(window, false) 导致了该问题。在更改 DetailFragment 中的状态栏透明度时,如何防止此问题并保持正确的 BottomNavigationView 高度?

任何见解或建议将不胜感激。谢谢!

kotlin android-fragments android-fragmentactivity material-components-android android-statusbar
1个回答
0
投票

将状态栏和导航栏更改为透明后,我遇到了与您相同的问题,我通过减少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;
}
© www.soinside.com 2019 - 2024. All rights reserved.