如何在AndroidManifest.xml React Native应用程序中同时使用“adjustPan”和“adjustResize”。
用例
我的导航是通过带有StackNavigator和TabNavigator的ReactNavigation进行的。我有一个文本框,用户可以在其中键入任何数据。执行此操作时,选项卡栏显示在键盘顶部。为了阻止它,我使用了“adjustPan”,并且效果很好。
在另一个屏幕上,我注册了多个文本框。在这里,我无法滚动整个屏幕,除非在键盘上单击“打勾”或手动单击系统后退按钮。为了解决这个问题,我发现“KeyboardAvoidingView”工作正常。但是要激活此功能,需要将“windowSoftInputMode”更改为“adjustResize”。
在文档中,发现这两者具有完全不同的属性,并且我不能一起使用。有人可以帮我吗?
引用:https://medium.freecodecamp.org/how-to-make-your-react-native-app-respond-gracefully-when-the-keyboard-pops-up-7442c1535580
最佳答案
我找到了一个名为 react-native-android-keyboard-adjust
的npm包,该包允许我们按需切换windowSoftInputMode
,这应该能够满足您的用例。但是,该库似乎没有得到积极维护,安装文档有些过时,但是在大多数情况下,您可以按照README.md
给出的说明进行操作。
对于Update MainActivity.java in your project
部分,React Native的最新版本应该能够自动链接依赖关系,并且不需要手动进行此修改。
完成上述步骤后,您可以尝试启动您的应用程序。如果遇到类似于The number of method references in a .dex file cannot exceed 64k
之类的错误,则可以将以下内容添加到android/app/build.gradle
文件中
android {
...
defaultConfig {
...
multiDexEnabled true
}
...
}
安装软件包后,可以调用库提供的方法来根据需要更改windowSoftInputMode
。例如,假设您的默认
windowSoftInputMode
为adjustResize
,并且要在ScreenA中使用adjustPan
,则可以在ScreenA挂载时调用AndroidKeyboardAdjust.setAdjustPan()
,并在卸载时通过调用windowSoftInputMode
将adjustResize
重置为AndroidKeyboardAdjust.setAdjustResize()
。