我需要在不打开键盘的情况下关注TextInput,因为在我的用例场景中,我可能有一个物理键盘连接到设备,并且我可能希望在Android上启用虚拟键盘。
我想的解决方案是将autoFocus
赋予TextInput
,然后在onFocus
回调中,关闭键盘。
然而,TextInput
也失去了焦点。
有什么可行的已知解决方案吗?
<TextInput
onChangeText={text => setState(text)}
value={state}
autoFocus
onFocus={() => {
console.log('physicalKeyboard set?', isPhysicalKeyboard())
if (isPhysicalKeyboard()) Keyboard.dismiss()
}}
/>
正如这个问题的公认答案中所建议的,有一个新的道具可以设置来实现我所需要的,那就是showSoftInputOnFocus
。
所以代码变成了这个
<TextInput
onChangeText={text => setState(text)}
value={state}
autoFocus
showSoftInputOnFocus={() => !isPhysicalKeyboard()}
/>
我发现在使用物理键盘时,将"showSoftInputOnFocus"设置为false并不能正常工作。在这种情况下,当组件最初获得焦点时,软键盘不会出现。但是,当你开始在物理键盘上打字时,软键盘就会出现。出于某种原因,将"keyboardType"道具设置为";数字焊盘";防止在物理键盘上键入时打开软键盘。注意,我只在安卓系统上尝试过,所以不确定这个破解是否适用于iOS。