首页 > 解决方案 > Kivy (Android):ScrollView.scroll_to() 不显示键盘隐藏的小部件

问题描述

当用户单击我的应用程序上的小部件时,如果小部件太低,出现的键盘可以将其隐藏。我试图ScrollView.scroll_to()要求将注意力集中在小部件上,它可以工作,但它没有在等式中使用键盘。

在我点击“Raison Sociale”之前。

在我点击“Raison Sociale”之后

所以小部件被键盘隐藏了。我不知道这样的功能是否已经存在。

If widget.hiddedByKeyboard():
    widget.show_taking_consideration_of_the_keyboard()

还有一个小部件在末尾的问题Screen,如果我们尝试通过向下滚动来显示它们,ScrollView即使这样会隐藏小部件,也会尝试再次向上。

标签: pythonandroidkivy

解决方案


啊经典,键盘涵盖了小部件问题。我遇到了这个,这是我为解决它所做的:

在我的 KV 文件中,我有这样的东西:

<MainWindow>:

    ... [A BUNCH OF WIDGETS] ...

    ScrollView:

        BoxLayout:
            orientation: 'vertical'
            size_hint: 1, None
            height: self.minimum_height

            ... [A BUNCH OF WIDGETS] ...

            Widget:  # The important widget
                id: buffer
                size_hint: (1, None)
                height: root.buffer

我在 ScrollView 的底部添加了一个空白小部件,其高度由顶级小部件(窗口 - 一个 BoxLayout)中的 NumericProperty 定义。

在 Python 文件中,我有:

from kivy.core.window import Window  # Need to import this 

class MainWindow(BoxLayout):

    buffer = NumericProperty()

然后当我请求键盘时,我确保设置buffer = Window.keyboard_height. 这将空白 Widget 的高度调整为键盘的高度,实质上为键盘创造了额外的空间。这为用户提供了额外的滚动空间来定位键盘。

您可以将此实现与该ScrollView.scroll_to()方法相结合,以创建一个非常好的效果。ScrollView.scroll_to(text_input_widget)当用户单击 TextInput 时基本上通过。这将自动向下滚动 ScrollView,使 TextInput 位于顶部,键盘位于其下方。

这可能不是最干净的实现(我现在可能会做得更好),但是创建一个大小为键盘高度的空白 Widget 的概念是相同的。


推荐阅读