我创建了一个简单的 kivy 应用程序,它可以在 Windows 上成功运行。它以产品的条形码作为输入并进一步进行。我为我的应用程序设计了自己的键盘+它也从条形码扫描仪获取输入(扫描的条形码被放置在聚焦的文本输入中)。为此,我已经设定了
Config.set('kivy', 'keyboard_mode', 'system')
效果非常好。
现在,我想在 Android 上运行这个应用程序。在android上,当TextInput获得焦点时,android的键盘变得可见,这是我不想要的。为此,我将 TextInput 属性 'keyboard_mode' 设置为 'managed',但它停止将扫描的条形码(来自条形码扫描仪)放入 TextInput(因为现在不会请求系统键盘)。
我想要的是,隐藏键盘,但它仍然与焦点 TextInput 绑定,以访问来自条形码扫描仪的输入。我被困在这里,任何帮助将不胜感激。
我正在使用:kivy==2.0.0、python==3.7.9 和 buildozer 来打包 Android 应用程序。
我有一些想法,但我首先想仔细检查您是否已将
Config.set('kivy', 'keyboard_mode', 'system')
语句放在正确的位置。
这需要出现在所有内容之前,即 main.py 文件的前两行应如下所示:
from kivy.config import Config
Config.set('kivy', 'keyboard_mode', 'system')
from kivy.app import App
from kivy.core.window import Window
# etc.
我之所以问这个,是因为导入
Config.set()
后写App
没有效果。在您的计算机上,我相信默认的 keyboard_mode
是 ''
,即简单地选择最佳选项,巧合的是 system
。这会给人一种工作正常的错觉 Config.set()
。
添加相关代码段textinput/textfield focus=True。
from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.lang.builder import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
kivyy=Builder.load_string("""
<MyContent>:
BoxLayout:
id:box_layout
orientation:'vertical'
Label:
text:'Focus textinput and focus where except textinput'
TextInput:
id:txt
text:''
hint_text:'type here'
on_focus:root.check_focus()
""")
class MyContent(BoxLayout):
def check_focus(self):
if self.ids.txt.focus==True:
print('here your keyboard design when focus')
self.my_keyboard=GridLayout(rows=2, cols=2, size=self.size)
for i in range(4):
self.but=Button(text=str(i), color='white')
self.but.bind(on_release=lambda _,text=self.but.text: self.write(text))
self.my_keyboard.add_widget(self.but)
self.ids.box_layout.add_widget(self.my_keyboard)
else:
print('delete your keyboard when unfocus')
self.ids.box_layout.remove_widget(self.my_keyboard)
def write(self, text):
self.ids.txt.focus=True
self.ids.txt.text += text
class exampleApp(App):
def build(self):
return MyContent()
kv=exampleApp().run()
按下按钮时查看“on_release”且 focus=True。