Window.softinput_mode = "below_target" 会导致视口跳转和 Android 上的 `TextInput` 焦点/ Cursor 问题
作者: kengoon创建于 2026年8月14日更新于 2026年8月14日
软件版本
- Python: 3.14.2
- 操作系统: Android
- Kivy: 3.0.0
- Kivy 安装方法: Buildozer
描述
在 Android 上使用 Window.softinput_mode = "below_target" 时,软键盘和 TextInput 处理似乎存在两个相关问题:
- 当 Android 软键盘消失后,整个 Kivy 窗口/内容会暂时向上移动,然后恢复到正常位置。
- 点击已聚焦的
TextInput以移动 Cursor 或选择文本会导致TextInput失去焦点,并关闭键盘。 这两个问题似乎都与below_target软输入模式所应用的视口平移有关。
重现代码
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
Window.softinput_mode = "below_target"
KV = """
BoxLayout:
orientation: "vertical"
padding: "20dp"
spacing: "20dp"
Widget:
TextInput:
size_hint_y: None
height: "48dp"
text: "Tap here, then tap between these characters"
multiline: False
Widget:
class TestApp(App):
def build(self):
return Builder.load_string(KV)
TestApp().run()https://GitHub.com/user-attachments/assets/d1b95bc7-bb53-459b-94b3-781c7a8ab017
重现步骤
问题 1: 视口在键盘消失后向上跳动
- 在 Android 上构建并运行应用程序。
- 点击
TextInput。 - Android 软键盘出现。
- 点击
TextInput外部以关闭键盘。 - 观察内容/窗口的移动。
问题 2: 点击已聚焦的 TextInput 会关闭键盘
- 在 Android 上构建并运行应用程序。
- 点击
TextInput。 - Android 软键盘出现。
- 在同一个
TextInput内部,在字符之间点击以移动 Cursor 或选择文本。 - 观察
TextInput失去焦点并关闭键盘。
实际行为
问题 1
在点击 TextInput 外部后:
- 键盘消失。
- 整个 Kivy 窗口/内容暂时向上移动,好像 Kivy 仍然认为键盘可见。
- 窗口/内容然后移回到正常位置。 这会产生可见的闪烁/跳动。
问题 2
当点击已聚焦的 TextInput 时:
TextInput失去焦点- Android 软键盘关闭
- Cursor 不能可靠地在字符之间移动
- 文本选择不起作用可靠
预期行为
问题 1
当键盘被关闭时,窗口/内容应直接返回到其正常位置。 在键盘不再可见时,不应有额外的向上移动。
问题 2
当点击已聚焦的 TextInput 时:
TextInput保持聚焦- 键盘保持可见
- Cursor 移动到点击位置
- 文本选择正常工作
内容来源: kivy/kivy