如何在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
例如,假设您的默认windowSoftInputModeadjustResize,并且要在ScreenA中使用adjustPan,则可以在ScreenA挂载时调用AndroidKeyboardAdjust.setAdjustPan(),并在卸载时通过调用windowSoftInputModeadjustResize重置为AndroidKeyboardAdjust.setAdjustResize()

10-06 03:00