即使删除了行为,KeyboardAvoidingView 也无法在 Android 上运行

Posted

技术标签:

【中文标题】即使删除了行为,KeyboardAvoidingView 也无法在 Android 上运行【英文标题】:KeyboardAvoidingView isn't working on Android even when behavior is deleted 【发布时间】:2018-10-03 17:38:15 【问题描述】:

我在 android 上遇到了 KeyboardAvoidingView 的问题。它适用于 ios。我的屏幕在屏幕的上半部分有一个视图组件,可能会也可能不会影响它。我已经尝试删除这些组件中的每一个,但 KeyboardAvoidingView 仅在我删除占据屏幕 60% 的组件时才有效。此组件是来自“react-native-youtube”的 YouTube 播放器,具有 flex: 1 样式。

我的代码看起来像这样..

<KeyboardAvoidingView
  behavior="padding"
  keyboardVerticalOffset=200
>
  <View style=styles.first>
    <View style=styles.second>
      <TouchableHighlight />
      <View style=styles.third>
        <TextInput 
          style=styles.textInput
          maxLength=80
          autoGrow=true
          maxHeight=130
          multiline=true
          editable=true
          onChangeText=onChange
          value=descriptionText
          autoFocus=true
          keyboardType='default'
          autoCorrect=false
          placeholder='Send a word'
          underlineColorAndroid=white
          selectionColor=purple
          returnKeyType='send'
          onSubmitEditing=handleSubmit
        />
      </View>
    </View>
  </View>
<KeyboardAvoidingView/>

first: 
  flexDirection: 'column',
  justifyContent: 'flex-start',
  position: 'relative',
  marginTop: 0,
,
second: 
  width: screenWidth,
  flexDirection: 'row',
  alignItems: 'center',
  paddingTop: 5,
  paddingBottom: 9,
,
third: 
  flexDirection: 'row',
  borderTopLeftRadius: 10,
  borderBottomLeftRadius: 10,
  paddingBottom: 5,
  paddingLeft: 10,
  paddingRight: 10,
  width: screenWidth - 102,
  minHeight: 36,
  alignItems: 'center',
,
textInput: 
  textAlign: 'left',
  fontSize: 14,
  fontWeight: '400',
  flex: 1,
  padding: 0,
  margin: 0,

这里有什么可能会影响KeyboardAvoidingView 的功能吗?我已经尝试删除 behavior="padding" ,因为 React Native 文档提到删除该道具后它在 android 上效果更好。

谢谢!

【问题讨论】:

【参考方案1】:

尝试将 flex 添加到所有样式可能会有所帮助,也许在 KeyboardAvoidingView 中也可能会有所帮助。

<KeyboardAvoidingView
  style=flex: 1
  keyboardVerticalOffset=0
  behavior='padding'
>

小吃博览会:https://snack.expo.io/BJT-4Fphz

【讨论】:

这也不起作用。尝试将flex: 1 添加到它周围的每个视图中。然后一个一个地拿走,它没有用:(谢谢!任何其他建议都很棒 @Dres 你可以在我上面的零食链接里玩。 谢谢!比在我正在开发的应用程序中重新加载要容易得多。我认为上半部分的内容可能导致这种预期行为的发生。我会继续努力的!【参考方案2】:

使用键盘可能很困难。

不过,Android(仅此一次)确实让它变得更简单了。

import  Platform  from 'react-native';

const isAndroid = Platform.OS === 'android';

componentDidMount() 
  if (isAndroid) 
    SoftInputMode.set(SoftInputMode.ADJUST_PAN);
  

【讨论】:

不行,我从github.com/MR03web/react-native-set-soft-input-mode 获得了 SoftInputMode,它让我编辑 build.gradle、settings.gradle 和 mainapplication.java。完成所有这些后我遇到了错误。不过谢谢!

以上是关于即使删除了行为,KeyboardAvoidingView 也无法在 Android 上运行的主要内容,如果未能解决你的问题,请参考以下文章

删除链表中的节点后,打印节点列表显示已删除节点

帆布指纹调研

帆布指纹调研

帆布指纹调研

帆布指纹调研

从 plist 文件中读取字典的奇怪行为