在 Android Kivy 上隐藏键盘时将键盘绑定到 TextInput

问题描述 投票:0回答:2

我创建了一个简单的 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 应用程序。

android python-3.x kivy kivy-language
2个回答
0
投票

我有一些想法,但我首先想仔细检查您是否已将

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()


0
投票

添加相关代码段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。

© www.soinside.com 2019 - 2024. All rights reserved.