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


问题原因
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
相关产品推荐
相关产品推荐

