我已经为此烦恼了一段时间了。希望比我更了解 kivy/和/或 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 文件中。
我必须将我的 numeric.json 布局放在我的 Assets 目录中。
最终,事情并没有那么难。由于某种原因,我只是很难让它发挥作用。
关于android - Kivy 应用程序在设备上运行时不使用 VKeyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542531/