Skip to main content
 首页 » 编程设计

android之Kivy 应用程序在设备上运行时不使用 VKeyboard

2024年11月01日37cyq1162

我已经为此苦苦思索了一段时间。希望比我更了解 kivy/and/android 的人能够回答我的问题(kivy 允许你为 android 编译 python 并包含一些不错的 UI 东西)

我已经创建了自己的 kivy vkeyboard 布局 json 文件,它在 Windows 中使用模拟器运行良好。 但是当我将它安装到设备上时,它从不使用我的自定义键盘。

我认为这是因为我没有将 .json 文件放在设备上的正确位置(但我真的不知道)

我的代码在下面

应用名称.kv

... 
<NumericVKeyboard>: 
    layout: "numeric" 
    size: (700,70) 
 
<more rules>... 

然后我在我创建的小部件类中使用它

from kivy.uix.textinput import TextInput 
class NumericTextInput(TextInput): 
    def on_focus(self, instance, value, *largs): 
        win = self.get_root_window() 
 
        if win: 
            win.release_all_keyboards() 
            win._keyboards = {} 
 
            if value: #User focus; use special keyboard 
                win.set_vkeyboard_class(NumericVKeyboard) 
                print "NumericVKeyboard:", win._vkeyboard_cls, VKeyboard.layout_path 
            else: #User defocus; switch back to standard keyboard 
                win.set_vkeyboard_class(VKeyboard) 
                print "VKeyboard:", win._vkeyboard_cls, VKeyboard.layout_path 
 
        return TextInput.on_focus(self, instance, value, *largs) 

在 Windows 上一切正常,并且它正确使用了 NumericVKeyboard。但是当我构建 apk 并将其放在设备上时,它只使用默认键盘而不是我的自定义键盘

如果有帮助,这是来自 adb logcat 的消息

<snip> 
I/python  ( 1261): NumericVKeyboard: <class 'base.NumericVKeyboard'> <kivy.properties.StringProperty object at 0x5d4db1f0> 
 
I/LatinIME(  284): InputType.TYPE_NULL is specified 
 
W/LatinIME(  284): Unexpected input class: inputType=0x00000000 imeOptions=0x00000000 
</snip> 

请帮忙……我快要绝望到要写我自己的“键盘”小部件了。但我真的很想用 kivy 的 vkeyboard

请您参考如下方法:

嗯,我不确定为什么我花了这么长时间才弄明白。但事后看来,诀窍是双重的,而且是显而易见的……

我必须将 keyboard_mode=dock 添加到 kivy 的 Config.ini 文件中。

我的 Assets 目录中必须有我的 numeric.json 布局。

最后也没那么难。出于某种原因,我只是在努力让它工作。