如何同时使用' adjustPan'和' adjustResize'对于' windowSoftInputMode'在React Native Android应用程序中

时间:2018-04-12 17:14:07

标签: react-native-android react-navigation

我如何同时使用' adjustPan'和' adjustResize'在AndroidManifest.xml中反应本机应用程序。

用例

我的导航是在ReactNavigation上使用StackNavigator和TabNavigator完成的。我有一个文本框,用户可以在其中键入任何数据。执行此操作时,标签栏显示在键盘顶部。为了阻止这个,我使用了' adjustPan'它运作良好。

在另一个屏幕上,我注册了多个文本框。在这里,我无法滚动整个屏幕,除非点击'勾选'在键盘上或手动单击系统后退按钮。为了解决这个问题,我找到了&键盘自动查看'这工作正常。但要激活这个需要改变windowSoftInputMode'到' adjustResize'。

在文档中,发现这两者具有完全不同的属性,我无法将它们放在一起。有人可以帮我吗?

参考文献:https://medium.freecodecamp.org/how-to-make-your-react-native-app-respond-gracefully-when-the-keyboard-pops-up-7442c1535580

2 个答案:

答案 0 :(得分:3)

使用'react-native-android-keyboard-adjust'进行检查,这将帮助您在注册屏幕上使用调整调整大小 https://www.npmjs.com/package/react-native-android-keyboard-adjust

安装软件包

  

npm install --save react-native-android-keyboard-adjust

更新android / app / build.gradle

将编译项目(“:react-native-android-keyboard-adjust”)添加到依赖项:

dependencies {
    ...
    compile project(":react-native-android-keyboard-adjust")
    ...
 }

更新android / settings.gradle

...
include ':react-native-android-keyboard-adjust'
project(':react-native-android-keyboard-adjust').projectDir = new File(settingsDir, '../node_modules/react-native-android-keyboard-adjust/android')
...

更新项目中的MainActivity.java

导入包

  

导入   net.zubricky.AndroidKeyboardAdjust.AndroidKeyboardAdjustPackage;   将包添加到getPackages方法

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
        ...
        new AndroidKeyboardAdjustPackage()
    );
}

示例

  

从导入AndroidKeyboardAdjust   'react-native-android-keyboard-adjust';

     

AndroidKeyboardAdjust.setAdjustNothing();

答案 1 :(得分:2)

我找到了一个名为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(),然后重置通过调用windowSoftInputMode

adjustResizeAndroidKeyboardAdjust.setAdjustResize()卸载