在 Nexus Player、Android Cordova 应用程序上打开时输入第一个字符的虚拟键盘
Posted
技术标签:
【中文标题】在 Nexus Player、Android Cordova 应用程序上打开时输入第一个字符的虚拟键盘【英文标题】:Virtual keyboard typing first character when it is opened on Nexus Player, Android Cordova app 【发布时间】:2018-12-27 16:18:11 【问题描述】:我知道这是针对特定设备的一个非常具体的问题,但我需要了解如何在一般情况下防止这种情况发生。
我有一个使用 Cordova 为 android 构建的 ReactJS 应用程序。支持的设备之一是 Nexus Player。出于某种原因,只有在 nexus 播放器上,当我打开虚拟键盘时,它会立即输入第一个字符。这通常是我最后离开字符选择器的地方。
假设我有一个电子邮件输入,如果我输入myemail@email.com
并转到下一个输入字段,当我打开虚拟键盘时它将输入m
。当然,如果用户在Enter
键处离开虚拟键盘,这将从一个小麻烦变成一个实际问题,这将阻止它被打开和/或立即提交表单。
我目前不知道如何处理它。
对于输入,我使用受控组件并通过状态设置它,因此渲染函数看起来像这样:
render ()
return (
<form onSubmit=onSubmit role='form' className='form'>
<div className='form-group'>
<div data-focusable data-focus-container>
<input
type='text'
className='form-control'
value=myValue
onChange=evt => this.setState(myValue: evt.target.value)
data-focusable
/>
</div>
</div>
</form>
)
现在...因为这是一个导航应用程序,所以我有一个键盘监听器,可以监听我从组件上的遥控器按下的任何键。我认为这可能是处理这个问题的方法。
keydownHandler(evt)
if (isDeviceNexuPlayer())
if (keyCodeIs('select', evt))
// do something to stop the first key from being immediately pressed
console.log('this is being called as expected')
)
正如 console.log 所述,这可以按预期工作。我需要知道的是如何阻止第一个键被触发。我已经尝试了一些东西,所以没有任何效果:
evt.stopPropagation()
: 什么都不做,打开虚拟键盘还是按第一个键
evt.stopImmediatePropagation()
: 将整个事情停止到即使打开后也不允许任何密钥工作的程度
我不知道还能做什么。我想它甚至不必只适用于 nexus 播放器。一般来说,我可以做些什么来防止在我打开虚拟键盘时按下那个额外的键?
【问题讨论】:
【参考方案1】:这听起来可能有点愚蠢,但值得一试。 尝试关闭键盘,取出电池,稍等片刻,然后将它们放回原处再试一次?当它重新启动时,它可能不会触发第一个键。 另外,不知道为什么附加的代码是相关的?
【讨论】:
它不是真正的物理键盘。它是当您选择需要输入内容的表单时打开的虚拟键盘。代码是相关的,因为这就是我处理输入的方式以及我试图阻止它立即输入内容的方式。 也许将您的代码从evt.stopPropagation()
更改为 event.stopPropagation()
会有所作为?这只会阻止任何父处理程序被执行 - 这可能会阻止“m”点击冒泡到父元素。以上是关于在 Nexus Player、Android Cordova 应用程序上打开时输入第一个字符的虚拟键盘的主要内容,如果未能解决你的问题,请参考以下文章
Nexus Player (Android TV) YouTubeAndroidPlayerApi 错误:“初始化 YouTube 播放器时出错。”
如何在 Nexus Player 上启用 USB 调试? (安卓电视)
用于调试 android TV 应用程序的 Android 盒子