You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:57:04