键盘识别滚动视图Android问题

时间:2017-08-02 16:16:27

标签: android react-native expo

我使用Expo XDE(xde-2.19.3)在屏幕上创建了一个带有一些TextInputs的反应原生项目。我使用KeyboardAwareScrollView将键盘下方的输入滚动到视图中并在iOS上正常工作,但在Android上无效。希望这是有道理的。

查看了KeyboardAwareScrollView文档,看到我需要配置AndroidManifest.xml,但似乎世博已经对此进行了整理:https://github.com/expo/expo/blob/master/template-files/android/AndroidManifest.xml

但是我仍然无法在Android上运行...

我能错过什么?

render() {
    return (
      <KeyboardAwareScrollView
        enableOnAndroid='true'
        enableAutoAutomaticScrol='true'
        keyboardOpeningTime={0}
      >
      <ScrollView style={styles.container}>
        <View style={styles.subcontainer}>
          <View style={styles.form}>
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
              <TextInput
                ref='NoduleCountInput'
                onFocus={() => this.onFocus()}
                onBlur={() => this.onBlur()}
                keyboardType='phone-pad'
                returnKeyType='done'
                placeholder='Test'
                style={styles.field}
              />
            </View>
         </View>
        </ScrollView>
      </KeyboardAwareScrollView>
    );
  }

6 个答案:

答案 0 :(得分:6)

我尝试了上述解决方案来支持跨平台,但它不正确。如果您希望自动滚动到TextInput的焦点工作,那么正确而完整的解决方案是按如下方式设置参数:

<KeyboardAwareScrollView
  enableOnAndroid={true}
  enableAutomaticScroll={(Platform.OS === 'ios')}
>
...
</KeyboardAwareScrollView>

这是因为默认情况下启用了enableAutomaticScroll,它会与原生Android行为混淆,从而产生意外结果。因此,当Platform是Android时,请将此字段设置为false。

是的,还要在app.json中设置以下内容,否则它将无效。

"androidStatusBar": {
  "backgroundColor": "#000000"
}

答案 1 :(得分:5)

我尝试了其他解决方案并且它们对我不起作用,但最后我设法通过使用以下代码使其工作:

 <KeyboardAwareScrollView enableOnAndroid={true} extraHeight={130} extraScrollHeight={130}>
  ...
</KeyboardAwareScrollView>

答案 2 :(得分:3)

这就是我修复它的方法:

app.json我设置:

"androidStatusBar": {
  "backgroundColor": "#000000"
}

这解决了这个问题,我不知道怎么回事。因此,只要其他人发现它有用,就会离开这里。

答案 3 :(得分:1)

 <KeyboardAwareScrollView
        enableOnAndroid={true}
        extraScrollHeight={90}
        >
       <Content>
        <View></View>
       </Content>
<KeyboardAwareScrollView/>

答案 4 :(得分:0)

对我来说,我在Android(原生0.62.2)上遇到了这个问题。 iOS运行正常。我发现Android清单中的adjustResize标志是罪魁祸首。我将其删除并开始工作

之前

android:windowSoftInputMode="stateAlwaysHidden|adjustPan|adjustResize"

之后

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

警告

我不知道将来会引起什么副作用。

答案 5 :(得分:-1)

使用

<activity android:windowSoftInputMode="adjustResize"></activity>

Manifest