You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端使用GiftedChat输入时最新聊天消息被遮挡问题求助

问题修复方案
  • 检查Android原生配置
    打开安卓项目android/app/src/main/AndroidManifest.xml,找到聊天页所属Activity的配置,将android:windowSoftInputMode属性值修改为adjustResize,不要使用adjustPan,示例配置如下:
    <activity
      android:name=".MainActivity"
      android:windowSoftInputMode="adjustResize"
      android:exported="true"
      <!-- 其他原有配置保持不变 -->
    />
    
    注意:若使用Expo开发,需要在app.json中新增配置"expo": {"android": {"softwareKeyboardLayoutMode": "resize"}},默认的pan模式会直接触发遮挡问题
  • 调整GiftedChat组件属性
    你当前配置的forceGetKeyboardHeight={false}会禁用组件内部的键盘高度计算逻辑,安卓端建议改为true;同时你配置的bottomOffset={26}可以先移除或者调整为更小的值,该值会额外增加输入框底部的间距,容易和键盘高度计算冲突。
  • 排查外层容器样式
    确认GiftedChat的父级容器没有设置底部padding、margin,也没有固定高度限制,需要让GiftedChat占满整个父容器的可用高度。
  • 兜底手动滚动方案
    若以上方案都无法解决,可以监听安卓键盘弹出事件,触发后主动让消息列表滚动到底部,修改代码如下:
    import { Keyboard } from 'react-native';
    
    export function Chat() {
      const chatRef = useRef(null);
      const [text, setText] = useState('');
      const [messages, setMessages] = useState([]);
    
      useEffect(() => {
        setMessages(initialMessages.reverse());
        // 绑定键盘弹出监听
        const keyboardListener = Keyboard.addListener('keyboardDidShow', () => {
          setTimeout(() => chatRef.current?.scrollToBottom(), 50);
        });
        // 卸载时移除监听
        return () => keyboardListener.remove();
      }, []);
    
      // 其他原有逻辑保持不变
    
      return (
        <GiftedChat
          ref={chatRef}
          // 其他原有属性保持不变
        />
      );
    }
    

内容的提问来源于stack exchange,提问作者EMATade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:00:02