用途:在 React Native 与 Expo 应用中实现逐帧精准、接近原生手感的键盘处理,适用于内容被键盘遮挡、键盘动画不同步等场景。核心思路是把 iOS 与 Android 两套不同的键盘模型统一映射到同一个动画值,由 UI 绑定该值。iOS 提供计划式动画(起止快照、时长与曲线),Android(现代 edge-to-edge)提供逐帧 insets,需自行驱动动画;忽略这一差异会导致观感异常。
主要能力与选型:整屏或单输入框保持可见用 KeyboardAvoidingView;多输入可滚动表单用 KeyboardAwareScrollView;单个元素(底部栏、发送栏、工具栏)贴键盘上方用 KeyboardStickyView;完全自定义动画用 useReanimatedKeyboardAnimation() 或 useKeyboardHandler() 配合 Reanimated SharedValue。官方建议使用 react-native-keyboard-controller,而非 RN 内置 KeyboardAvoidingView(后者依赖 LayoutAnimation 与延迟的 keyboardDidShow,Android 上会跳变而非平滑滑动)。
使用方式:先安装库及同伴依赖 npm install react-native-keyboard-controller react-native-reanimated;在应用根部包一层 KeyboardProvider,以在 Android 订阅 WindowInsetsAnimationCallback 并处理 edge-to-edge。随后按选型使用对应组件或 hook,样式从共享动画值派生。
限制与注意:Android 15(API 35)默认强制 edge-to-edge,系统不再随键盘缩放窗口,旧的 adjustResize/windowSoftInputMode 会失效,应依赖 KeyboardProvider;will* 事件在 Android 不触发,keyboardDidShow 在动画结束后才触发,不宜据此做同步动画;各 Android 版本行为碎片化,建议使用抽象 OS 差异的库;组件选错会导致焦点输入框光标被遮挡或触发不必要的整屏布局重算。资料未提供具体收费与价格信息。