Kivy技术问题:下拉菜单按钮适配换行文本时出现异常空白
Kivy换行下拉菜单按钮垂直额外空白问题及Android渲染异常
最近我在做一个支持文本换行的Kivy下拉菜单时碰到了个头疼的问题:按钮里的文本确实能正常换行,但渲染出来的时候,文本上下总会多出一些莫名其妙的空白。
一开始我以为是文本长度导致的,还特意参考了关于Kivy Label文本换行的相关讨论和官方博客内容,但都没解决这个问题。后来我发现,这个额外空白和文本长度没关系,反而和循环索引、下拉菜单里添加的组件数量有关。
我试了个临时办法:把代码里的
btn2 = WrapButton(text=('|' + str('long text..is long...%d' % (21-index) * index) + '|') , size_hint=(1,None))
改成
btn2 = WrapButton(text=('|' + str('long text..is long...%d' % (21-index) * index) + '|') , size_hint=(None,None),width=700)
也就是设置size_hint=(None,None)并指定width=700,这样确实能消除那些垂直空白,但代价是按钮失去了自动宽度适配的能力。我实在搞不懂,width的size_hint怎么会影响垂直方向的空白呢?
下面是能复现问题的完整代码:
from kivy.uix.button import Button from kivy.uix.dropdown import DropDown from kivy.uix.boxlayout import BoxLayout from kivy.base import runTouchApp from kivy.lang import Builder Builder.load_string(''' <WrapButton>: halign: "center" valign: "center" font_size: 20 size_hint_y: None text_size : self.size height: self.texture_size[1] ''') class WrapButton(Button): pass dropdown2 = DropDown() layout = BoxLayout(padding=0,orientation='vertical') mainbutton2 = WrapButton(text='Select...', size_hint=(1, None),height=95,pos_hint={'center_x': .5, 'center_y': 0}) mainbutton2.bind(on_release=dropdown2.open) layout.add_widget(mainbutton2) for index in range(20): btn2 = WrapButton(text=('|' + str('long text..is long...%d' % (21-index) * index) + '|') , size_hint=(1,None)) btn2.bind(on_release=lambda btn2: dropdown2.select(btn2.text)) dropdown2.add_widget(btn2) dropdown2.bind(on_select=lambda instance, x: setattr(mainbutton2, 'text', x)) runTouchApp(layout)
更新:Android设备渲染异常问题
后来我采纳了相关解决方案,但在Android设备上运行时出现了渲染异常(有画面 artifacts),目前我正在排查是不是设备本身的问题,想问问社区有没有相关的建议或者遇到过类似情况的朋友能指点一下。
异常截图:
内容的提问来源于stack exchange,提问作者MarkPippin
相关产品推荐
相关产品推荐

