You need to enable JavaScript to run this app. Kivy开发Android应用:MDToolbar菜单图标在Android端不显示问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Kivy开发Android应用:MDToolbar菜单图标在Android端不显示问题排查

异常根因

你贴的MDToolbar相关kv配置本身没有语法问题,不需要改动。你遇到的「Linux本地跑工具栏图标正常、打包成安卓后图标消失但点击回调依然生效」的问题,本质是安卓打包流程漏掉了KivyMD的内置图标字体资源,和业务代码逻辑无关:

  • 本地Linux运行时,Python会直接读取全局环境里KivyMD安装目录下的图标字体文件,menu这个字符串能正常匹配到对应图标素材,所以渲染正常
  • 用Buildozer打包安卓安装包时,工具默认只扫描项目根目录下的文件,不会自动去Python的site-packages目录里收录KivyMD自带的字体、图标资源,安卓端找不到对应图标素材,就会渲染成空白
  • 绑定的打开侧边栏的回调不受影响,是因为left_action_items对应的可点击热区是组件逻辑层提前生成的,哪怕图标渲染失败,热区的位置、点击事件绑定都不会丢失,点那个空白位置自然能正常触发侧边栏打开。
落地解决步骤
  • 第一,修改项目下的buildozer.spec配置,补上遗漏的资源打包规则:
    找到配置文件里的source.include_exts项,加上字体格式的后缀,不然打包工具会把字体文件当成无关文件过滤掉:

    source.include_exts = py,png,jpg,kv,atlas,ttf,otf
    再加一段KivyMD资源的匹配规则,让打包工具主动把环境里的KivyMD自带字体、图标素材收进安装包:
    source.include_patterns = */kivymd/fonts/*,*/kivymd/images/*
    另外记得把requirements里的依赖版本固定成兼容的组合,别用latest自动拉取最新版,不然很容易出现版本不匹配的资源解析问题,比如固定成稳定版:
    requirements = python3,kivy==2.3.0,kivymd==1.2.0

  • 第二,清理旧的构建缓存重新打包
    删掉项目目录下的.buildozer、.bin两个缓存文件夹,之前的缓存会残留缺资源的旧安装包内容,清完再重新执行打包命令即可
  • 兜底方案:如果上述配置依然不生效,可以手动从Python环境的KivyMD安装目录里,把materialdesignicons-webfont.ttf、fontawesome5-webfont.ttf两个核心图标字体文件,复制到项目根目录新建的assets文件夹下,打包时这部分资源会被自动收录,不会再出现图标找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 09:15:07