所以我需要创建一个自定义的底部导航,上面的边框不是一条直线.

我已经成功地使自定义栏具有这个形状,我已经创建并剪裁了一个custom shape.

我的问题是,一旦我将导航栏传递到scaffold的BottomBar参数,它就会自动将我的栏的整个高度"保存"为屏幕内容之外的单独部分.

所以当有一个向下滚动的项目列表时,它被切成一条直线,而不是从我的自定义形状中间的半个圆圈的两侧显示出来.

enter image description here

只有当我在内容参数中的一个框内添加底部导航时,它才能工作(请参阅下面的代码),而不是将其作为脚手架的bottomBar参数传递,但这样我的导航就不会被视为应用程序内容填充的一部分,因此我需要 for each 屏幕添加底部间距,以确保视图不会在栏后丢失.

When no spacing added manually - enter image description here

可以工作的代码,但没有在bottomNav参数中传递它-

Scaffold(
            modifier = Modifier
                .fillMaxSize(),
            topBar = topBar,
//             bottomBar = bottomBar, ** The problem is when passed here **
            content = { paddingValues ->
                Box(Modifier.padding(paddingValues)) {
                    content(paddingValues)
                    BottomNavigationBar(Modifier.align(Alignment.BottomCenter), navController)
                }
            }
        )

Desired outcome while passing it as bottomNav param to scaffold - (Achieved it only by adding space manually like explained in previous paragraph) enter image description here

设置透明背景不是解决方案,因为正如所述,当bar作为scaffold的bottomBar参数传递时,它会成为实际内容下方的一个单独区域.

推荐答案

在花了相当多的时间寻找解决方案后,我最终找到了一个实际上相当简单和直接的解决方案.

我没有像接收到的那样传递paddingValues,而是创建了一个定制的PaddingValues对象,并且只从实际填充中获取顶部填充,以考虑工具栏的部分,并根据需要添加底部填充,而不是像我希望的那样传递底部填充.

Scaffold(
            modifier = Modifier
                .fillMaxSize(),
            topBar = topBar,
            bottomBar = bottomBar,
            content = { paddingValues ->
                val heightToDecrease = 20.dp //Custom shape's notch height to decrease from bottom padding
                Box(Modifier.fillMaxSize().padding(
                    PaddingValues(
                        top = paddingValues.calculateTopPadding(),
                        bottom = paddingValues.calculateBottomPadding() - heightToDecrease))) {
                    content()
                }
            },
        )

Android相关问答推荐

Android Compose Lazy柱形实时UI更改

KMM项目生成错误-';在项目';中找不到测试类:共享';

使用Kotlin/Compose与Java/XML指南的比较

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

登录方法显示为空列表,即使它显示的是Firebase身份验证控制台

如何从LazyColumn中的图标异步获取可绘制的加载?

将输出写入已发布的 Android 应用程序中的日志(log)文件?

参数化类RecyclerView.Adapter的原始使用

如何在 Jetpack Compose 中设置卡片高度

在 theme.xml 中使用 android:autoCompleteTextViewStyle

java.lang.IllegalArgumentException:与请求匹配的导航目的地 NavDeepLinkRequest

为 AlertDialog 的消息文本设置自定义字体

如何在jetpack compose中创建水印文字效果

更新后 Firebase 服务无法在模拟器上运行

为什么按钮没有拉伸到屏幕边缘?

IconButton 中可绘制的图标是黑色的,尽管它是白色的

如何将房间数据库导出到 .CSV

如何在 Jetpack Compose 中填充矢量图像的背景?

WindowManager 内的 RecyclerView 不更新

即使我在单选按钮上明确设置了选中状态,RecyclerView 中的单选按钮也会随机取消选中