React Native - Disable soft keyboard permanently on Android

1.3k views Asked by At

Is it possible not to show the soft keyboard even when the TextInput gets focused? My use case is that I need to hide the keyboard completely (for example like when you use some external keyboard) but I need to retain focus on the TextInput so I can use it normally (see the caret and so).

I don't like hacking libs, but I looked inside the textinput folder in the react-native package and found some files which I thought could be relevant. First this one:

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

I replaced the code on line 96 with this:

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

but unfortunately it didn't work.

Then I found this file:

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

And commented out the line 215, but again, it didn't help.

Could anybody point me in a correct direction about how to get this done? Thanks.

2

There are 2 answers

2
Tyler Whitman On

You can do this by setting a flag on the MainActivity in the /android part of the project.

Open the AndroidManifest.xml file for app/src/main and under the MainActivity change:

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

to this

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

That should disable the keyboard permanently for that Activity, which in the general case is the bulk of your React Native app on Android. For more information see: https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

0
Vijay On

You can do it by adding an attribute to the textinput "showsoftinputonfocus" to false

More info on implementation https://techythought.com/home/detail/Disable_keyboard_for_textinput_in_React-native