You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD侧边导航栏打开时无法覆盖页面 输入框显示在导航栏上层

问题截图1
问题截图2

问题原因

KivyMD的MDNavigationLayout是侧边导航栏的专用容器,要求侧边导航栏和页面主内容必须作为它的直接子组件,且组件添加顺序决定绘制层级:先添加的组件在下层,后添加的组件在上层。
现有代码把顶部工具栏、MDNavigationDrawer、MDNavigationLayout写成了同级组件,后加载的表单输入框组件层级高于导航栏,就会出现输入框盖在导航栏上方的问题。

修复方法

  • 调整Homepage屏幕下的布局结构,用MDNavigationLayout作为根容器,包裹所有页面内容和侧边导航栏
  • 主内容区(顶部工具栏+子页面ScreenManager)放在MDNavigationLayout的第一个子节点位置,侧边导航栏放在第二个子节点位置,保证导航栏层级更高
  • 可额外给导航栏加zindex: 10属性,强制置顶避免层级异常

修正后的核心KV代码(Homepage部分)

<Homepage>:
    name: "homepage"
    MDNavigationLayout:
        # 主页面内容,层级更低
        BoxLayout:
            orientation: 'vertical'
            MDToolbar:
                title: 'Navigation'
                left_action_items: [['menu', lambda x: nav_drawer.set_state('toggle')]]
                right_action_items: [["images/asteria.png", lambda x: None]]
                elevation: 5

            ScreenManager:
                id: screen_manager
                Screen:
                    name: "Homepage"
                    MDLabel:
                        text: "Welcome Home"
                        halign: "center"

                Screen:
                    name: "addNewCustomer"
                    MDLabel:
                        text: "Add New customer"
                        halign: "center"

                Screen:
                    name: "addNewStaff"
                    MDLabel:
                        text: "Add New Staff"
                        halign: "center"

                Screen:
                    name: "caseList"
                    MDLabel:
                        text: "Case List"
                        halign: "center"

                Screen:
                    name: "casePool"
                    MDLabel:
                        text: "Case Pool"
                        halign: "center"

                Screen:
                    name: "Create Case"
                    MDTextFieldRound:
                        id: user
                        hint_text: "Case Title"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.875, "center_x": 0.155}

                    MDTextFieldRound:
                        id: user2
                        hint_text: "e.g. Matthew Inwards School of Swag"
                        mode: "rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 14
                        pos_hint: {"top": 0.779, "center_x": 0.155}

        # 侧边导航栏,放在内容之后,层级更高
        MDNavigationDrawer:
            id: nav_drawer
            zindex: 10
            Nav:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
                manager: root.manager

Python端代码无需额外修改,替换对应KV片段后即可实现导航栏打开时覆盖所有页面内容的效果。

内容的提问来源于stack exchange,提问作者Ewan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:12:28