KivyMD如何实现点击工具栏操作项弹出下拉菜单功能
KivyMD工具栏点击弹出下拉菜单实现方案
你需要将触发菜单的载体从居中的MDDropDownItem替换为MDTopAppBar(工具栏)的右侧动作按钮,同时调整菜单的弹出位置、尺寸参数匹配示例效果,完整可运行代码如下:
from kivy.lang import Builder from kivy.metrics import dp from kivymd.app import MDApp from kivymd.uix.menu import MDDropdownMenu KV = ''' MDScreen: MDTopAppBar: id: app_bar title: "示例应用" pos_hint: {"top": 1} right_action_items: [["dots-vertical", lambda x: app.menu.open()]] ''' class Test(MDApp): def __init__(self, **kwargs): super().__init__(**kwargs) self.screen = Builder.load_string(KV) d_items = ['Snapshot','Settings','History','Logout','Exit'] menu_items = [ { "viewclass": "OneLineListItem", "text": i, "height": dp(48), "on_release": lambda x=i: self.menu_item_click(x), } for i in d_items ] self.menu = MDDropdownMenu( # 通过id绑定工具栏右侧动作按钮作为触发源,稳定性更高 caller=self.screen.ids.app_bar.ids.right_actions.children[0], items=menu_items, # 菜单从触发按钮下方弹出,匹配示例位置 position="bottom", # 调整菜单宽度适配内容 width_mult=3, ) def menu_item_click(self, text_item): # 这里写对应菜单项的点击逻辑 print(f"点击了{text_item}") self.menu.dismiss() def build(self): return self.screen Test().run()
关键调整说明
- 布局中新增了
MDTopAppBar组件,将三个点的动作按钮放在工具栏右侧,点击直接触发菜单弹出 - 菜单的
position参数设置为bottom,保证菜单从触发按钮的下方弹出,和示例图的展示位置一致 - 调整了菜单项高度为dp(48),符合移动端交互规范,和示例样式对齐
- 菜单宽度
width_mult调整为3,刚好适配菜单项的文本长度,不会出现多余留白或文字折行
参考效果示例:

内容的提问来源于stack exchange,提问作者Shourov
相关产品推荐
相关产品推荐

