当虚拟键盘出现在React Native中时如何自动向上滚动屏幕(在Android上)

Sum*_*haw 6 android textinput scrollview android-virtual-keyboard react-native

虚拟键盘覆盖了文本输入,我看不到我正在输入的内容。如何避免这种情况?(我尝试使用 KeyboardAwareScrollView 但它仍然覆盖文本输入)。我遇到的另一个问题是关于我的 styles.container 属性 -> justifyContent 和alignItems 的错误 - 它说将它们放在 ScrollView 属性内 - 我不知道如何做到这一点 - 我是 React Native 的新手。

  render() {
    return (
      <KeyboardAwareScrollView>
      <View style={styles.container} >
         <TextInput
          style={styles.input}
          underlineColorAndroid="transparent"
          placeholder="username"
          placeholderTextColor="#00bcd4"
          autoCapitalize="none"
          secureTextEntry={true}
          onChangeText={username => this.setState({ username })}  

          />
          <View style={styles.btnContainer}>     
         <TouchableOpacity style={styles.userBtn}  onPress={() => this.Login(this.state.email, this.state.password)}>
                   <Text style={styles.btnTxt}>Login</Text>
         </TouchableOpacity>

        </View>
      </View>
      </KeyboardAwareScrollView>
Run Code Online (Sandbox Code Playgroud)

对于 KeyboardAvoidingView 也有同样的事情:

  render() {
    return (
      // <View style={styles.container} >
         <KeyboardAvoidingView behavior="padding" style={styles.container}>
         <Text style={styles.heading} >Welcome to SelfCare !</Text>
          <Image
          style={{width: 200, height: 200, marginBottom: 40}}
          source={require('./src/images/icon.png')}
          />
         <TextInput
          style={styles.input}
          underlineColorAndroid="transparent"
          placeholder="Email"
          placeholderTextColor="#00bcd4"
          autoCapitalize="none"
          onChangeText={email => this.setState({ email })}  
             />
         <TextInput
          style={styles.input}
          underlineColorAndroid="transparent"
          placeholder="Password"
          placeholderTextColor="#00bcd4"
          autoCapitalize="none"
          secureTextEntry={true}
          onChangeText={password => this.setState({ password })}  

          />
          <View style={styles.btnContainer}>     
         <TouchableOpacity style={styles.userBtn}  onPress={() => this.Login(this.state.email, this.state.password)}>
                   <Text style={styles.btnTxt}>Login</Text>
         </TouchableOpacity>
         <TouchableOpacity style={styles.userBtn}  onPress={() => this.SignUp(this.state.email, this.state.password)}>
                   <Text style={styles.btnTxt}>Sign Up</Text>
         </TouchableOpacity>         
        </View>
        </KeyboardAvoidingView>
      // </View>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

键盘覆盖文本输入

Dan*_*ana 4


如果您希望屏幕上升,您可以使用而不是它更容易实现并且执行相同的工作,除非您希望用户能够在键盘打开时滚动屏幕。<< 这个道具是为了让屏幕如何行动。它还将 [height,position] 作为值。
<KeyboardAvoidingView> <KeyboardAwareScrollView>


behavior='padding'

<View style={styles.container}>
   <KeyboardAvoidingView behavior="padding">

         ... Your UI ...

   </KeyboardAvoidingView>
</View>
Run Code Online (Sandbox Code Playgroud)

或者对于简写,您可以替换<View><KeyboardAvoidingView>

<KeyboardAvoidingView behavior="padding" style={styles.container}>

         ... Your UI ...

</KeyboardAvoidingView>
Run Code Online (Sandbox Code Playgroud)

  • 嘿,添加这个成功了!` const keyVerticalOffset = Platform.OS === 'ios' ? 40:0 返回(&lt;KeyboardAvoidingView 行为='位置'keyboardVerticalOffset={keyboardVerticalOffset}&gt; &lt;ListView .../&gt; &lt;KeyboardAvoidingView/&gt; )` (3认同)