React Native - 在Android上永久禁用软键盘

问题描述:

即使TextInput聚焦,是否可能不显示软键盘?我的用例是我需要完全隐藏键盘(例如,当您使用某个外部键盘时),但我需要保留对TextInput的焦点,以便我可以正常使用它(请参阅脱字符等)。React Native - 在Android上永久禁用软键盘

我不喜欢黑客入侵库,但是我在react-native包中找到textinput文件夹,并找到了一些我认为可能相关的文件。首先这一个:

https://github.com/facebook/react-native/blob/1e8f3b11027fe0a7514b4fc97d0798d3c64bc895/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java#L96

我替换为上线96代码:

editText.setInputType(InputType.TYPE_NULL); editText.setTextIsSelectable(true);

但遗憾的是它没有工作。

然后我发现这个文件:

https://github.com/facebook/react-native/blob/1e8f3b11027fe0a7514b4fc97d0798d3c64bc895/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java#L215

而且注释掉线215,但同样,它并没有帮助。

有人可以指出我正确的方向如何完成这项工作吗?谢谢。

您可以通过在项目的/android部分的MainActivity上设置一个标志来完成此操作。

打开AndroidManifest.xml文件app/src/main和下MainActivity变化:

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
    android:windowSoftInputMode="adjustResize"> 

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
    android:windowSoftInputMode="stateHidden"> 

这应该永久禁用键盘该活动,这在一般情况下是大量你的React Native应用程序在Android上。欲了解更多信息,请参阅:https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

+0

感谢您的建议,但不幸的是它没有工作。我也尝试'stateAlwaysHidden',也没有工作。我忘了提及这些是我尝试的第一个选项。 – filster

+0

看来'windowSoftInputMode'只有在焦点自动分配的情况下才有效。 (第三个答案在这里)https://stackoverflow.com/questions/1109022/close-hide-the-android-soft-keyboard “...默认情况下,Android会自动分配初始焦点到第一个EditText或可聚焦控件当然,InputMethod(通常是软键盘)会通过显示自己来响应焦点事件。当设置为stateAlwaysHidden时,AndroidManifest.xml中的windowSoftInputMode属性指示键盘忽略这个自动分配的初始焦点。 “ – filster