android 底部导航栏与Jetpack合成中的屏幕内容重叠

o2rvlv0m  于 2023-01-19  发布在  Android
关注(0)|答案(5)|浏览(212)

我有一个BottomNavBar,它在ScaffoldbottomBar中调用。
每个屏幕都包含一个LazyColumn,用于显示一堆图像。
由于某种原因,当我完成滚动时,BottomNavBar与项目列表的下部重叠。
我该怎么补救呢?

这里是主活动的设置内容

SetContent{
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text(text = "tartufozon") },
                actions = {
                    IconButton(onClick = { Timber.d("Mail clicked") }) {
                        Icon(Icons.Default.Email, contentDescription = null)
                    }
                }
            )
        },
        bottomBar = {
            BottomNavBar(navController = navController)
        }
    ) {
    BottomNavScreensController(navController = navController)
    }
}
cygmwpex

cygmwpex1#

在内容中添加布局和视图,并使用其填充,如示例所示:

Scaffold(
        content = {
            Box(modifier = Modifier.padding(it)) {
                //add your layout here
            }

        },
        topBar = { 
                 //your top bar
        },
        floatingActionButton = {
           //your floating action bar
        },
        bottomBar = {
            //your bottom navigation
        }
    )
polkgigr

polkgigr2#

根据Scaffold的API定义,内部内容(包含BottomNavScreensController的尾随lambda)被赋予一个PaddingValues对象,该对象为顶部应用栏、底部应用栏等提供适当的填充量。
现在,您根本没有引用该填充,因此,您的内容没有被填充。这就是导致重叠的原因。
您可以在BottomNavScreensController周围添加一个Box来应用填充,或者将填充直接传递到BottomNavScreensController中,以便每个单独的屏幕都可以正确地应用填充;任一解决方案都有效。

Scaffold(
    topBar = {
      //
    },
    bottomBar = {
        //
    }
    ) { innerPadding ->
        // Apply the padding globally to the whole BottomNavScreensController
        Box(modifier = Modifier.padding(innerPadding)) {
            BottomNavScreensController(navController = navController)
        }
    }
}
c0vxltue

c0vxltue3#

下面是ianhanniballake的答案和注解,为了保存几分钟,代码如下所示:

Scaffold(
    topBar = {
      //
    },
    bottomBar = {
        //
    }
    ) { innerPadding ->
        Box(modifier = Modifier.padding(
          PaddingValues(0.dp, 0.dp, 0.dp, innerPadding.calculateBottomPadding()) {
            BottomNavScreensController(navController = navController)
        }
    }
}
gupuwyp2

gupuwyp24#

您不再需要执行任何计算。在支架内容中,执行以下操作:

content = { padding ->
  Column(
    modifier = Modifier.padding(padding)
  ) {...
jtoj6r0c

jtoj6r0c5#

Scaffold(
    bottomBar = {
       BottomNavigationBar(navController = navController)
   }
) { innerPadding ->
      Box(modifier = Modifier.padding(innerPadding)) {
               DestinationsNavHost(
                  navGraph = NavGraphs.root,
                  navController = navController,
                  engine = navHostEngine
                )
         }
}

相关问题