当虚拟键盘出现在本机反应中时如何自动向上滚动屏幕(在android上)

Posted

技术标签:

【中文标题】当虚拟键盘出现在本机反应中时如何自动向上滚动屏幕(在android上)【英文标题】:How to auto scroll the screen up when virtual keyboard appears in react native (on android) 【发布时间】:2020-06-19 07:12:23 【问题描述】:

虚拟键盘覆盖了文本输入,我看不到我正在输入的内容。如何避免这种情况? (我尝试使用 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>

与 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>
    );
  

【问题讨论】:

【参考方案1】:

如果你想让屏幕向上,你可以使用&lt;KeyboardAvoidingView&gt; 而不是 &lt;KeyboardAwareScrollView&gt; 除非您希望用户能够在键盘打开时滚动屏幕,否则它更容易实现并且执行相同的工作。behavior='padding'

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

         ... Your UI ...

   </KeyboardAvoidingView>
</View>

或者,您可以将&lt;View&gt; 替换为&lt;KeyboardAvoidingView&gt;,如下所示:

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

         ... Your UI ...

</KeyboardAvoidingView>

【讨论】:

试过了,还是一样:(我已经添加了代码sn-p和截图 嘿,添加这个成功了! ` const keyboardVerticalOffset = Platform.OS === 'ios' ? 40:0 返回()`

以上是关于当虚拟键盘出现在本机反应中时如何自动向上滚动屏幕(在android上)的主要内容,如果未能解决你的问题,请参考以下文章

当新行添加到 UITextView 实例中时,如何向上滚动视图?

在android中打开键盘时设置滚动屏幕向上移动

当键盘出现在 Swift 中时 UITextField 向上移动

如何防止在android中打开键盘时反应本机模式向上移动?

当Android Textinput autoFocus为true时反应本机键盘不弹出

当键盘出现在 iOS 中时启用滚动内容