隐藏默认android键盘

2024-09-29 06:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的kivy应用程序,我无法隐藏默认的android键盘。我正在尝试使用android.hide_keyboard(),但它在我的设备中不起作用。最有趣的是,该函数适用于Pydroid,但在模拟器和设备上,应用程序会立即中断,而不会出现python错误。我的文本输入代码:

class MyTextInput(TextInput):

    def __init__(self, **kwargs):
        super(MyTextInput, self).__init__(**kwargs)
        self.wx = self.x
        self.wy = self.y
        self.wpos = self.pos
        self._keyboard_mode = 'dock'
        self.allow_vkeyboard = True
        self.single_vkeyboard = True

    def on_focus(self, instance, value, *largs):
        if platform == 'android':
            import android
            android.hide_keyboard()
        win = self.get_root_window()
        if win:
            win.release_all_keyboards()
            win._keyboards = {}
            win.set_vkeyboard_class(MyKeyboard)

Tags: selftrue应用程序ifinitdefwinkwargs
1条回答
网友
1楼 · 发布于 2024-09-29 06:22:13

在花了很长时间试图弄明白android.hide_keyboard()函数之后,决定使用它自己的JAVA函数

public class KeyboardUtils {

    public static void hideKeyboard(Activity activity) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }
}

相同名称的文件被放置在构建文件夹的java根目录中(对我来说是 ...src/main/java/org/jnius

以及MyTextInput类的代码:

class MyTextInput(TextInput):

    def __init__(self, **kwargs):
        super(MyTextInput, self).__init__(**kwargs)
        self.wx = self.x
        self.wy = self.y
        self.wpos = self.pos
        self.keyboard_mode = 'managed'
        self.allow_vkeyboard = True
        self.single_vkeyboard = True
        self.visible = False

    def on_touch_down(self, touch):
        changed = False
        win = self.get_root_window()
        if win:
            win.release_all_keyboards()
            win._keyboards = {}
            win.set_vkeyboard_class(MyKeyboard)
        if self.pos[0] <= touch.pos[0] <= self.pos[0] + self.width:
            if self.pos[1] <= touch.pos[1] <= self.pos[1] + self.height:
                if not self.visible:
                    self.show_keyboard()
                    if platform == 'android':
                        from jnius import autoclass, cast
                        utils = autoclass('org.jnius.KeyboardUtils')
                        activity = autoclass('org.kivy.android.PythonActivity')
                        current_activity = cast('android.app.Activity',
                                                activity.mActivity)
                        utils.hideKeyboard(current_activity)
                    self.visible = True
                    changed = True
                    self.focus = True

        if not changed:
            if self.visible:
                self.hide_keyboard()
                self.visible = False

相关问题 更多 >