Python-Kivy应用GridLayout布局下弹出键盘遮挡输入框问题求助
解决方案
第一步:添加软键盘适配配置
在主Python文件的开头加入如下配置,开启Kivy的软键盘弹出时自动调整窗口尺寸的能力:
from kivy.core.window import Window # 核心配置:软键盘弹出时压缩窗口高度,避免遮挡输入框 Window.softinput_mode = "adjust_resize"
如果是打包为安卓应用,还需要在buildozer.spec配置文件中修改如下参数:
android:windowSoftInputMode = adjustResize
第二步:修正KV布局结构
你之前接入ScrollView不生效的核心原因是没有关闭GridLayout的垂直尺寸自适应、也没有给固定宽高的子组件关闭size_hint,修改后的KV代码如下:
<FourthWindow>: name: "fourth" # 外层套ScrollView实现滚动 ScrollView: do_scroll_x: False # 禁止横向滚动 do_scroll_y: True GridLayout: orientation: "vertical" cols: 2 padding: 10 spacing: 10 size_hint_x: 1 size_hint_y: None # 关闭垂直尺寸自适应,改为根据子组件总高度计算 height: self.minimum_height # 总高度等于所有子组件高度+间距总和 Label: text: "Title" size_hint_x: None size_hint_y: None width:120 height: 50 font_size: 32 background_color: (0.0/255, 0.0/255, 230.0/255, 1) canvas.before: Color: rgba: self.background_color Rectangle: size: self.size pos: self.pos color: utils.get_color_from_hex('#f2f5f7') bold: True italic: True Button: text: "Main" size_hint_x: None size_hint_y: None font_size: 32 background_normal: '' background_color: utils.get_color_from_hex('#34a1eb') width: 240 height: 90 on_release: app.root.current = "first" root.manager.transition.direction = "right" Label: text: "Label 1" size_hint_x: None size_hint_y: None width:70 height: 30 font_size: 24 canvas.before: Color: rgba: self.background_color Rectangle: size: self.size pos: self.pos color: utils.get_color_from_hex('#f2f5f7') bold: True italic: True TextInput: id: spid size_hint_x: None size_hint_y: None multiline:False width:70 height: 50 font_size: 24 # 剩下所有的Label、TextInput组件都按照上面的方式添加size_hint_x: None、size_hint_y: None即可,原有其他配置不变 # 注意:原代码中出现了两个id为sptrv的TextInput,需要修改为不同id避免逻辑报错
验证逻辑
配置完成后,软键盘弹出时窗口会自动压缩高度,ScrollView会自动滚动到当前聚焦的TextInput位置,不会出现遮挡问题。
内容的提问来源于stack exchange,提问作者Barry Grover
相关产品推荐
相关产品推荐

