在设备上运行时,Kivy Application不使用VKeyboard

时间:2013-08-30 22:48:08

标签: android python kivy

我一直在敲打这个问题一段时间了。希望有人比我更了解kivy /和/或android将能够回答我的问题(kivy允许你为android编译python并包含一些不错的UI东西)

我创建了自己的kivy vkeyboard布局json文件,它在使用模拟器的窗口中工作正常。 但是当我将它安装到设备上时,它从不使用我的自定义键盘。

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

我的代码在

之下

appname.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

1 个答案:

答案 0 :(得分:2)

嗯,我不知道为什么花了这么长时间才弄明白。但诀窍是双重的,后见之明完全明显......

我必须将keyboard_mode=dock添加到 Config.ini 文件中以供kivy使用。

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

最后并没有那么难。我只是因为某些原因而努力让它发挥作用。