@react-native-ohos/react-native-keyboard-controller 1.17.0-beta.2 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/LICENSE +21 -21
  2. package/README.OpenSource +11 -11
  3. package/README.md +686 -19
  4. package/harmony/keyboard_controller/BuildProfile.ets +16 -16
  5. package/harmony/keyboard_controller/Index.ets +29 -28
  6. package/harmony/keyboard_controller/build-profile.json5 +31 -31
  7. package/harmony/keyboard_controller/hvigorfile.ts +6 -6
  8. package/harmony/keyboard_controller/obfuscation-rules.txt +17 -17
  9. package/harmony/keyboard_controller/oh-package-lock.json5 +28 -18
  10. package/harmony/keyboard_controller/oh-package.json5 +10 -10
  11. package/harmony/keyboard_controller/src/main/cpp/CMakeLists.txt +7 -7
  12. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentDescriptor.h +86 -0
  13. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.cpp +104 -0
  14. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.h +64 -0
  15. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewJSIBinder.h +60 -0
  16. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.cpp +119 -96
  17. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.h +111 -111
  18. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentDescriptor.h +94 -94
  19. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.cpp +840 -288
  20. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.h +169 -103
  21. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewJSIBinder.h +65 -65
  22. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentDescriptor.h +79 -79
  23. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.cpp +108 -108
  24. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.h +83 -83
  25. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaJSIBinder.h +60 -60
  26. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentDescriptor.h +46 -0
  27. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.cpp +37 -0
  28. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.h +32 -0
  29. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewJSIBinder.h +23 -0
  30. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.cpp +103 -46
  31. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.h +48 -48
  32. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardControllerPackage.h +20 -0
  33. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.cpp +45 -45
  34. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.h +49 -49
  35. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.cpp +207 -186
  36. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.h +131 -112
  37. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.cpp +77 -64
  38. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.h +85 -77
  39. package/harmony/keyboard_controller/src/main/ets/Logger.ts +66 -66
  40. package/harmony/keyboard_controller/src/main/ets/{RNKeyboardControllerPackage.ts → RNKeyboardControllerPackage.ets} +70 -66
  41. package/harmony/keyboard_controller/src/main/ets/RNKeyboardControllerTurboModule.ts +465 -273
  42. package/harmony/keyboard_controller/src/main/ets/RNStatusBarManagerCompatTurboModule.ts +128 -119
  43. package/harmony/keyboard_controller/src/main/ets/Type.ts +63 -62
  44. package/harmony/keyboard_controller/src/main/module.json5 +11 -11
  45. package/harmony/keyboard_controller/src/main/resources/base/element/string.json +8 -8
  46. package/harmony/keyboard_controller/src/main/resources/en_US/element/string.json +8 -8
  47. package/harmony/keyboard_controller/src/main/resources/zh_CN/element/string.json +8 -8
  48. package/harmony/keyboard_controller/{ts.ts → ts.ets} +29 -29
  49. package/harmony/keyboard_controller.har +0 -0
  50. package/lib/commonjs/animated.js +22 -11
  51. package/lib/commonjs/animated.js.map +1 -1
  52. package/lib/commonjs/architecture.js +8 -0
  53. package/lib/commonjs/architecture.js.map +1 -0
  54. package/lib/commonjs/bindings.js +40 -5
  55. package/lib/commonjs/bindings.js.map +1 -1
  56. package/lib/commonjs/bindings.native.js +28 -5
  57. package/lib/commonjs/bindings.native.js.map +1 -1
  58. package/lib/commonjs/compat.js +50 -0
  59. package/lib/commonjs/compat.js.map +1 -0
  60. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js +21 -15
  61. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js.map +1 -1
  62. package/lib/commonjs/components/KeyboardAvoidingView/index.js +39 -14
  63. package/lib/commonjs/components/KeyboardAvoidingView/index.js.map +1 -1
  64. package/lib/commonjs/components/KeyboardAwareScrollView/index.js +94 -57
  65. package/lib/commonjs/components/KeyboardAwareScrollView/index.js.map +1 -1
  66. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +5 -5
  67. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  68. package/lib/commonjs/components/KeyboardAwareScrollView/utils.js.map +1 -1
  69. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js +13 -0
  70. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js.map +1 -0
  71. package/lib/commonjs/components/KeyboardChatScrollView/index.js +122 -0
  72. package/lib/commonjs/components/KeyboardChatScrollView/index.js.map +1 -0
  73. package/lib/commonjs/components/KeyboardChatScrollView/types.js +6 -0
  74. package/lib/commonjs/components/KeyboardChatScrollView/types.js.map +1 -0
  75. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +221 -0
  76. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  77. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +149 -0
  78. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  79. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js +240 -0
  80. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  81. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js +6 -0
  82. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  83. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js +40 -0
  84. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  85. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js +92 -0
  86. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  87. package/lib/commonjs/components/KeyboardStickyView/index.js.map +1 -1
  88. package/lib/commonjs/components/KeyboardToolbar/Arrow.js +2 -3
  89. package/lib/commonjs/components/KeyboardToolbar/Arrow.js.map +1 -1
  90. package/lib/commonjs/components/KeyboardToolbar/Button.js +2 -3
  91. package/lib/commonjs/components/KeyboardToolbar/Button.js.map +1 -1
  92. package/lib/commonjs/components/KeyboardToolbar/colors.js.map +1 -1
  93. package/lib/commonjs/components/KeyboardToolbar/colors.native.js.map +1 -1
  94. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js +13 -0
  95. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  96. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js +25 -0
  97. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  98. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js +58 -0
  99. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  100. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js +49 -0
  101. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  102. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js +49 -0
  103. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  104. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js +42 -0
  105. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  106. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js +6 -0
  107. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  108. package/lib/commonjs/components/KeyboardToolbar/compound/context.js +17 -0
  109. package/lib/commonjs/components/KeyboardToolbar/compound/context.js.map +1 -0
  110. package/lib/commonjs/components/KeyboardToolbar/constants.js +17 -0
  111. package/lib/commonjs/components/KeyboardToolbar/constants.js.map +1 -0
  112. package/lib/commonjs/components/KeyboardToolbar/index.js +98 -87
  113. package/lib/commonjs/components/KeyboardToolbar/index.js.map +1 -1
  114. package/lib/commonjs/components/KeyboardToolbar/types.js.map +1 -1
  115. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js +120 -0
  116. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  117. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js +15 -0
  118. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  119. package/lib/commonjs/components/hooks/useColorScheme.js.map +1 -1
  120. package/lib/commonjs/components/hooks/useCombinedRef.js +24 -0
  121. package/lib/commonjs/components/hooks/useCombinedRef.js.map +1 -0
  122. package/lib/commonjs/components/hooks/useScrollState.js +62 -0
  123. package/lib/commonjs/components/hooks/useScrollState.js.map +1 -0
  124. package/lib/commonjs/components/index.js +7 -0
  125. package/lib/commonjs/components/index.js.map +1 -1
  126. package/lib/commonjs/constants.js +3 -1
  127. package/lib/commonjs/constants.js.map +1 -1
  128. package/lib/commonjs/context.js +1 -0
  129. package/lib/commonjs/context.js.map +1 -1
  130. package/lib/commonjs/hooks/index.js +14 -1
  131. package/lib/commonjs/hooks/index.js.map +1 -1
  132. package/lib/commonjs/hooks/useKeyboardState/index.js +39 -0
  133. package/lib/commonjs/hooks/useKeyboardState/index.js.map +1 -0
  134. package/lib/commonjs/hooks/useWindowDimensions/index.android.js.map +1 -1
  135. package/lib/commonjs/hooks/useWindowDimensions/index.js.map +1 -1
  136. package/lib/commonjs/index.js +27 -1
  137. package/lib/commonjs/index.js.map +1 -1
  138. package/lib/commonjs/internal.js +54 -18
  139. package/lib/commonjs/internal.js.map +1 -1
  140. package/lib/commonjs/module.js +21 -12
  141. package/lib/commonjs/module.js.map +1 -1
  142. package/lib/commonjs/reanimated.js.map +1 -1
  143. package/lib/commonjs/reanimated.native.js.map +1 -1
  144. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js +12 -0
  145. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  146. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js +8 -2
  147. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  148. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  149. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  150. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js +12 -0
  151. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  152. package/lib/commonjs/specs/NativeKeyboardController.js.map +1 -1
  153. package/lib/commonjs/specs/NativeStatusBarManagerCompat.js.map +1 -1
  154. package/lib/commonjs/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  155. package/lib/commonjs/types.js.map +1 -1
  156. package/lib/commonjs/utils/findNodeHandle/index.js +9 -0
  157. package/lib/commonjs/utils/findNodeHandle/index.js.map +1 -0
  158. package/lib/commonjs/utils/findNodeHandle/index.native.js +13 -0
  159. package/lib/commonjs/utils/findNodeHandle/index.native.js.map +1 -0
  160. package/lib/commonjs/utils.js.map +1 -1
  161. package/lib/commonjs/views/KeyboardExtender/index.js +30 -0
  162. package/lib/commonjs/views/KeyboardExtender/index.js.map +1 -0
  163. package/lib/commonjs/views/OverKeyboardView/index.js.map +1 -1
  164. package/lib/commonjs/views/index.js +7 -0
  165. package/lib/commonjs/views/index.js.map +1 -1
  166. package/lib/module/animated.js +24 -13
  167. package/lib/module/animated.js.map +1 -1
  168. package/lib/module/architecture.js +2 -0
  169. package/lib/module/architecture.js.map +1 -0
  170. package/lib/module/bindings.js +39 -5
  171. package/lib/module/bindings.js.map +1 -1
  172. package/lib/module/bindings.native.js +27 -5
  173. package/lib/module/bindings.native.js.map +1 -1
  174. package/lib/module/compat.js +43 -0
  175. package/lib/module/compat.js.map +1 -0
  176. package/lib/module/components/KeyboardAvoidingView/hooks.js +22 -16
  177. package/lib/module/components/KeyboardAvoidingView/hooks.js.map +1 -1
  178. package/lib/module/components/KeyboardAvoidingView/index.js +38 -14
  179. package/lib/module/components/KeyboardAvoidingView/index.js.map +1 -1
  180. package/lib/module/components/KeyboardAwareScrollView/index.js +97 -60
  181. package/lib/module/components/KeyboardAwareScrollView/index.js.map +1 -1
  182. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +5 -5
  183. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  184. package/lib/module/components/KeyboardAwareScrollView/utils.js.map +1 -1
  185. package/lib/module/components/KeyboardChatScrollView/hooks.js +2 -0
  186. package/lib/module/components/KeyboardChatScrollView/hooks.js.map +1 -0
  187. package/lib/module/components/KeyboardChatScrollView/index.js +115 -0
  188. package/lib/module/components/KeyboardChatScrollView/index.js.map +1 -0
  189. package/lib/module/components/KeyboardChatScrollView/types.js +2 -0
  190. package/lib/module/components/KeyboardChatScrollView/types.js.map +1 -0
  191. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +207 -0
  192. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  193. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +143 -0
  194. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  195. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js +234 -0
  196. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  197. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js +2 -0
  198. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  199. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js +33 -0
  200. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  201. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js +87 -0
  202. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  203. package/lib/module/components/KeyboardStickyView/index.js.map +1 -1
  204. package/lib/module/components/KeyboardToolbar/Arrow.js +2 -2
  205. package/lib/module/components/KeyboardToolbar/Arrow.js.map +1 -1
  206. package/lib/module/components/KeyboardToolbar/Button.js +2 -2
  207. package/lib/module/components/KeyboardToolbar/Button.js.map +1 -1
  208. package/lib/module/components/KeyboardToolbar/colors.js.map +1 -1
  209. package/lib/module/components/KeyboardToolbar/colors.native.js.map +1 -1
  210. package/lib/module/components/KeyboardToolbar/compound/components/Background.js +6 -0
  211. package/lib/module/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  212. package/lib/module/components/KeyboardToolbar/compound/components/Content.js +18 -0
  213. package/lib/module/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  214. package/lib/module/components/KeyboardToolbar/compound/components/Done.js +50 -0
  215. package/lib/module/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  216. package/lib/module/components/KeyboardToolbar/compound/components/Next.js +41 -0
  217. package/lib/module/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  218. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js +41 -0
  219. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  220. package/lib/module/components/KeyboardToolbar/compound/components/index.js +6 -0
  221. package/lib/module/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  222. package/lib/module/components/KeyboardToolbar/compound/components/types.js +2 -0
  223. package/lib/module/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  224. package/lib/module/components/KeyboardToolbar/compound/context.js +10 -0
  225. package/lib/module/components/KeyboardToolbar/compound/context.js.map +1 -0
  226. package/lib/module/components/KeyboardToolbar/constants.js +11 -0
  227. package/lib/module/components/KeyboardToolbar/constants.js.map +1 -0
  228. package/lib/module/components/KeyboardToolbar/index.js +98 -88
  229. package/lib/module/components/KeyboardToolbar/index.js.map +1 -1
  230. package/lib/module/components/KeyboardToolbar/types.js.map +1 -1
  231. package/lib/module/components/ScrollViewWithBottomPadding/index.js +112 -0
  232. package/lib/module/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  233. package/lib/module/components/ScrollViewWithBottomPadding/styles.js +9 -0
  234. package/lib/module/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  235. package/lib/module/components/hooks/useColorScheme.js.map +1 -1
  236. package/lib/module/components/hooks/useCombinedRef.js +18 -0
  237. package/lib/module/components/hooks/useCombinedRef.js.map +1 -0
  238. package/lib/module/components/hooks/useScrollState.js +56 -0
  239. package/lib/module/components/hooks/useScrollState.js.map +1 -0
  240. package/lib/module/components/index.js +1 -0
  241. package/lib/module/components/index.js.map +1 -1
  242. package/lib/module/constants.js +3 -0
  243. package/lib/module/constants.js.map +1 -1
  244. package/lib/module/context.js +1 -0
  245. package/lib/module/context.js.map +1 -1
  246. package/lib/module/hooks/index.js +3 -1
  247. package/lib/module/hooks/index.js.map +1 -1
  248. package/lib/module/hooks/useKeyboardState/index.js +33 -0
  249. package/lib/module/hooks/useKeyboardState/index.js.map +1 -0
  250. package/lib/module/hooks/useWindowDimensions/index.android.js.map +1 -1
  251. package/lib/module/hooks/useWindowDimensions/index.js.map +1 -1
  252. package/lib/module/index.js +3 -2
  253. package/lib/module/index.js.map +1 -1
  254. package/lib/module/internal.js +53 -18
  255. package/lib/module/internal.js.map +1 -1
  256. package/lib/module/module.js +21 -12
  257. package/lib/module/module.js.map +1 -1
  258. package/lib/module/reanimated.js.map +1 -1
  259. package/lib/module/reanimated.native.js.map +1 -1
  260. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js +6 -0
  261. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  262. package/lib/module/specs/KeyboardControllerViewNativeComponent.js +7 -1
  263. package/lib/module/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  264. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  265. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  266. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js +5 -0
  267. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  268. package/lib/module/specs/NativeKeyboardController.js.map +1 -1
  269. package/lib/module/specs/NativeStatusBarManagerCompat.js.map +1 -1
  270. package/lib/module/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  271. package/lib/module/types.js.map +1 -1
  272. package/lib/module/utils/findNodeHandle/index.js +2 -0
  273. package/lib/module/utils/findNodeHandle/index.js.map +1 -0
  274. package/lib/module/utils/findNodeHandle/index.native.js +3 -0
  275. package/lib/module/utils/findNodeHandle/index.native.js.map +1 -0
  276. package/lib/module/utils.js.map +1 -1
  277. package/lib/module/views/KeyboardExtender/index.js +23 -0
  278. package/lib/module/views/KeyboardExtender/index.js.map +1 -0
  279. package/lib/module/views/OverKeyboardView/index.js.map +1 -1
  280. package/lib/module/views/index.js +1 -0
  281. package/lib/module/views/index.js.map +1 -1
  282. package/lib/typescript/animated.d.ts +2 -38
  283. package/lib/typescript/architecture.d.ts +1 -0
  284. package/lib/typescript/bindings.d.ts +15 -1
  285. package/lib/typescript/bindings.native.d.ts +10 -1
  286. package/lib/typescript/compat.d.ts +12 -0
  287. package/lib/typescript/components/KeyboardAvoidingView/index.d.ts +5 -0
  288. package/lib/typescript/components/KeyboardAwareScrollView/index.d.ts +4 -1
  289. package/lib/typescript/components/KeyboardChatScrollView/hooks.d.ts +2 -0
  290. package/lib/typescript/components/KeyboardChatScrollView/index.d.ts +17 -0
  291. package/lib/typescript/components/KeyboardChatScrollView/types.d.ts +113 -0
  292. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/helpers.d.ts +132 -0
  293. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.d.ts +18 -0
  294. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.ios.d.ts +21 -0
  295. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/types.d.ts +37 -0
  296. package/lib/typescript/components/KeyboardChatScrollView/useEndVisible.d.ts +17 -0
  297. package/lib/typescript/components/KeyboardChatScrollView/useExtraContentPadding/index.d.ts +45 -0
  298. package/lib/typescript/components/KeyboardToolbar/Button.d.ts +2 -2
  299. package/lib/typescript/components/KeyboardToolbar/compound/components/Background.d.ts +6 -0
  300. package/lib/typescript/components/KeyboardToolbar/compound/components/Content.d.ts +7 -0
  301. package/lib/typescript/components/KeyboardToolbar/compound/components/Done.d.ts +7 -0
  302. package/lib/typescript/components/KeyboardToolbar/compound/components/Next.d.ts +4 -0
  303. package/lib/typescript/components/KeyboardToolbar/compound/components/Prev.d.ts +4 -0
  304. package/lib/typescript/components/KeyboardToolbar/compound/components/index.d.ts +5 -0
  305. package/lib/typescript/components/KeyboardToolbar/compound/components/types.d.ts +14 -0
  306. package/lib/typescript/components/KeyboardToolbar/compound/context.d.ts +9 -0
  307. package/lib/typescript/components/KeyboardToolbar/constants.d.ts +10 -0
  308. package/lib/typescript/components/KeyboardToolbar/index.d.ts +12 -45
  309. package/lib/typescript/components/KeyboardToolbar/types.d.ts +24 -1
  310. package/lib/typescript/components/ScrollViewWithBottomPadding/index.d.ts +30 -0
  311. package/lib/typescript/components/ScrollViewWithBottomPadding/styles.d.ts +7 -0
  312. package/lib/typescript/components/hooks/useCombinedRef.d.ts +3 -0
  313. package/lib/typescript/components/hooks/useScrollState.d.ts +17 -0
  314. package/lib/typescript/components/index.d.ts +3 -0
  315. package/lib/typescript/constants.d.ts +1 -0
  316. package/lib/typescript/context.d.ts +1 -0
  317. package/lib/typescript/hooks/index.d.ts +2 -0
  318. package/lib/typescript/hooks/useKeyboardState/index.d.ts +4 -0
  319. package/lib/typescript/index.d.ts +4 -3
  320. package/lib/typescript/internal.d.ts +4 -0
  321. package/lib/typescript/specs/ClippingScrollViewDecoratorViewNativeComponent.d.ts +10 -0
  322. package/lib/typescript/specs/KeyboardControllerViewNativeComponent.d.ts +4 -0
  323. package/lib/typescript/specs/KeyboardToolbarGroupViewNativeComponent.d.ts +6 -0
  324. package/lib/typescript/specs/NativeKeyboardController.d.ts +6 -2
  325. package/lib/typescript/types.d.ts +81 -5
  326. package/lib/typescript/utils/findNodeHandle/index.d.ts +4 -0
  327. package/lib/typescript/utils/findNodeHandle/index.native.d.ts +2 -0
  328. package/lib/typescript/views/KeyboardExtender/index.d.ts +5 -0
  329. package/lib/typescript/views/index.d.ts +1 -0
  330. package/package.json +183 -174
  331. package/src/animated.tsx +248 -255
  332. package/src/architecture.ts +1 -0
  333. package/src/bindings.native.ts +97 -62
  334. package/src/bindings.ts +81 -42
  335. package/src/compat.ts +44 -0
  336. package/src/components/KeyboardAvoidingView/hooks.ts +130 -123
  337. package/src/components/KeyboardAvoidingView/index.tsx +232 -188
  338. package/src/components/KeyboardAwareScrollView/index.tsx +452 -389
  339. package/src/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.ts +133 -133
  340. package/src/components/KeyboardAwareScrollView/utils.ts +41 -41
  341. package/src/components/KeyboardChatScrollView/hooks.ts +2 -0
  342. package/src/components/KeyboardChatScrollView/index.tsx +164 -0
  343. package/src/components/KeyboardChatScrollView/types.ts +117 -0
  344. package/src/components/KeyboardChatScrollView/useChatKeyboard/helpers.ts +268 -0
  345. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ios.ts +260 -0
  346. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ts +374 -0
  347. package/src/components/KeyboardChatScrollView/useChatKeyboard/types.ts +39 -0
  348. package/src/components/KeyboardChatScrollView/useEndVisible.ts +66 -0
  349. package/src/components/KeyboardChatScrollView/useExtraContentPadding/index.ts +149 -0
  350. package/src/components/KeyboardStickyView/index.tsx +66 -66
  351. package/src/components/KeyboardToolbar/Arrow.tsx +80 -80
  352. package/src/components/KeyboardToolbar/Button.tsx +98 -98
  353. package/src/components/KeyboardToolbar/colors.native.ts +37 -37
  354. package/src/components/KeyboardToolbar/colors.ts +16 -16
  355. package/src/components/KeyboardToolbar/compound/components/Background.tsx +9 -0
  356. package/src/components/KeyboardToolbar/compound/components/Content.tsx +25 -0
  357. package/src/components/KeyboardToolbar/compound/components/Done.tsx +57 -0
  358. package/src/components/KeyboardToolbar/compound/components/Next.tsx +49 -0
  359. package/src/components/KeyboardToolbar/compound/components/Prev.tsx +49 -0
  360. package/src/components/KeyboardToolbar/compound/components/index.ts +5 -0
  361. package/src/components/KeyboardToolbar/compound/components/types.ts +15 -0
  362. package/src/components/KeyboardToolbar/compound/context.ts +25 -0
  363. package/src/components/KeyboardToolbar/constants.ts +14 -0
  364. package/src/components/KeyboardToolbar/index.tsx +220 -223
  365. package/src/components/KeyboardToolbar/types.ts +72 -40
  366. package/src/components/ScrollViewWithBottomPadding/index.tsx +216 -0
  367. package/src/components/ScrollViewWithBottomPadding/styles.ts +10 -0
  368. package/src/components/hooks/useColorScheme.ts +6 -6
  369. package/src/components/hooks/useCombinedRef.ts +22 -0
  370. package/src/components/hooks/useScrollState.ts +81 -0
  371. package/src/components/index.ts +14 -11
  372. package/src/constants.ts +23 -19
  373. package/src/context.ts +70 -68
  374. package/src/hooks/index.ts +91 -90
  375. package/src/hooks/useKeyboardState/index.ts +52 -0
  376. package/src/hooks/useWindowDimensions/index.android.ts +38 -38
  377. package/src/hooks/useWindowDimensions/index.ts +1 -1
  378. package/src/index.ts +27 -23
  379. package/src/internal.ts +146 -84
  380. package/src/module.ts +64 -52
  381. package/src/reanimated.native.ts +132 -132
  382. package/src/reanimated.ts +29 -29
  383. package/src/specs/ClippingScrollViewDecoratorViewNativeComponent.ts +19 -0
  384. package/src/specs/KeyboardControllerViewNativeComponent.ts +82 -71
  385. package/src/specs/KeyboardGestureAreaNativeComponent.ts +21 -20
  386. package/src/specs/KeyboardToolbarGroupViewNativeComponent.ts +10 -0
  387. package/src/specs/NativeKeyboardController.ts +23 -19
  388. package/src/specs/NativeStatusBarManagerCompat.ts +14 -14
  389. package/src/specs/OverKeyboardViewNativeComponent.ts +12 -12
  390. package/src/types.ts +330 -243
  391. package/src/utils/findNodeHandle/index.native.ts +3 -0
  392. package/src/utils/findNodeHandle/index.ts +6 -0
  393. package/src/utils.ts +1 -1
  394. package/src/views/KeyboardExtender/index.tsx +30 -0
  395. package/src/views/OverKeyboardView/index.tsx +43 -43
  396. package/src/views/index.ts +2 -1
  397. package/lib/commonjs/monkey-patch.android.js +0 -57
  398. package/lib/commonjs/monkey-patch.android.js.map +0 -1
  399. package/lib/commonjs/monkey-patch.js +0 -11
  400. package/lib/commonjs/monkey-patch.js.map +0 -1
  401. package/lib/module/monkey-patch.android.js +0 -47
  402. package/lib/module/monkey-patch.android.js.map +0 -1
  403. package/lib/module/monkey-patch.js +0 -5
  404. package/lib/module/monkey-patch.js.map +0 -1
  405. package/lib/typescript/monkey-patch.android.d.ts +0 -2
  406. package/lib/typescript/monkey-patch.d.ts +0 -2
  407. package/src/monkey-patch.android.ts +0 -44
  408. package/src/monkey-patch.ts +0 -4
package/README.md CHANGED
@@ -1,19 +1,686 @@
1
- # @react-native-ohos/react-native-keyboard-controller
2
-
3
- 本项目基于 [react-native-keyboard-controller@v1.16.5](https://github.com/kirillzyusko/react-native-keyboard-controller/tree/1.16.5)
4
-
5
- ## 文档地址 / Documentation URL
6
-
7
- [中文 / Chinese](https://gitcode.com/OpenHarmony-RN/usage-docs/blob/master/zh-cn/react-native-keyboard-controller.md)
8
-
9
- [英文 / English](https://gitcode.com/OpenHarmony-RN/usage-docs/blob/master/en/react-native-keyboard-controller.md)
10
-
11
- ## Codegen
12
-
13
- 该库已接入 codegen,具体请查阅文档。
14
-
15
- The library has been integrated with codegen. Please refer to the documentation for details.
16
-
17
- ## 请悉知 / Acknowledgements
18
-
19
- 本项目基于 [The MIT License (MIT)](https://github.com/kirillzyusko/react-native-keyboard-controller/blob/main/LICENSE) ,请自由地享受和参与开源。
1
+ > 文档模板:v0.4.2
2
+
3
+ <p align="center">
4
+ <h1 align="center"> <code>react-native-keyboard-controller</code> </h1>
5
+ </p>
6
+
7
+ 本项目基于 [react-native-keyboard-controller](https://github.com/kirillzyusko/react-native-keyboard-controller) 开发。
8
+
9
+ 该第三方库的仓库已迁移至 Gitcode,且支持直接从 npm 下载,新的包名为:`@react-native-ohos/react-native-keyboard-controller`。版本所属关系如下:
10
+
11
+ | 三方库名称 | 三方库版本(npm地址) | 发布信息 | 支持RN版本 | Autolink | 编译API版本 | 社区基线版本 | 源码地址 |
12
+ | ---------- | --------------------- | -------- | ---------- | -------- | ----------- | ------------ | -------- |
13
+ | @react-native-ohos/react-native-keyboard-controller | [~ 1.17.0(开发中)](https://www.npmjs.com/package/@react-native-ohos/react-native-keyboard-controller) | [GitCode Releases](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/releases) | 0.82.* | 是 | API12+ | 1.21.8 | [br_rnoh0.82](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/tree/br_rnoh0.82) |
14
+
15
+ ## 简介
16
+
17
+ React Native 生态中用于精细控制键盘行为的增强库。<br/>
18
+ 核心功能是解决原生键盘交互的局限性,提供键盘弹出/收起的动画联动、高度监听、自定义工具栏及键盘避让等能力!<br/>
19
+ 帮助开发者轻松构建流畅、无缝的键盘联动输入体验。
20
+
21
+ ## 下载安装
22
+
23
+ 进入到工程目录并输入以下命令:
24
+
25
+ <!-- tabs:start -->
26
+
27
+ #### **npm**
28
+
29
+ ```bash
30
+ npm install @react-native-ohos/react-native-keyboard-controller
31
+ ```
32
+
33
+ #### **yarn**
34
+
35
+ ```bash
36
+ yarn add @react-native-ohos/react-native-keyboard-controller
37
+ ```
38
+ <!-- tabs:end -->
39
+
40
+ 另外本库依赖三方库[react-native-reanimated](https://gitcode.com/CPF-RN/rntpc_react-native-reanimated),请按照[react-native-reanimated指导文档](https://gitcode.com/OpenHarmony-RN/usage-docs/blob/master/zh-cn/react-native-reanimated.md)引入此依赖库。
41
+
42
+ ## Link
43
+
44
+ | | 是否支持autolink | RN框架版本 |
45
+ |-------------------------------|------------------|-----------|
46
+ | ~ 1.17.0 | Yes | 0.82 |
47
+
48
+ <details>
49
+ <summary>ManualLink: 此步骤为手动配置原生依赖项的指导</summary>
50
+
51
+ 首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 `harmony`。
52
+
53
+ ### 在工程根目录的 `oh-package.json5` 添加 overrides 字段
54
+
55
+ 为了让工程依赖同一个版本的 RN SDK,需要在工程根目录的 `oh-package.json5` 添加 overrides 字段,指向工程需要使用的 RN SDK 版本。替换的版本既可以是一个具体的版本号,也可以是一个模糊版本,还可以是本地存在的 HAR 包或源码目录。
56
+
57
+ 关于该字段的作用请阅读[官方说明](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-oh-package-json5-V5#zh-cn_topic_0000001792256137_overrides)
58
+
59
+ ```json
60
+ {
61
+ "overrides": {
62
+ "@rnoh/react-native-openharmony": "^0.82.1" // ohpm 在线版本
63
+ // "@rnoh/react-native-openharmony" : "./react_native_openharmony.har" // 指向本地 har 包的路径
64
+ // "@rnoh/react-native-openharmony" : "./react_native_openharmony" // 指向源码路径
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### 引入原生端代码
70
+
71
+ 目前有两种方法:
72
+
73
+ 1. 通过 har 包引入(在 IDE 完善相关功能后该方法会被遗弃,目前首选此方法);
74
+
75
+ 2. 直接链接源码。
76
+
77
+ 方法一:通过 har 包引入(推荐)
78
+
79
+ > [!TIP] har 包位于三方库安装路径的 `harmony` 文件夹下。
80
+
81
+ 打开 `entry/oh-package.json5`,添加以下依赖
82
+
83
+ ```json
84
+
85
+ "dependencies": {
86
+ "@rnoh/react-native-openharmony": "file:../react_native_openharmony",
87
+ "@react-native-ohos/react-native-keyboard-controller": "file:../../node_modules/@react-native-ohos/react-native-keyboard-controller/harmony/keyboard_controller.har"
88
+ }
89
+
90
+ ```
91
+
92
+ 点击右上角的 `sync` 按钮
93
+
94
+ 或者在终端执行:
95
+
96
+ ```bash
97
+ cd entry
98
+ ohpm install
99
+ ```
100
+
101
+ 方法二:直接链接源码
102
+
103
+ > [!TIP] 如需使用直接链接源码,请参考[直接链接源码说明](https://gitcode.com/CPF-RN/usage-docs/blob/master/zh-cn/link-source-code.md)
104
+
105
+ ### 配置 CMakeLists 和引入 RNKeyboardControllerPackage
106
+
107
+ 打开 `entry/src/main/cpp/CMakeLists.txt`,添加:
108
+
109
+ ```diff
110
+ project(rnapp)
111
+ cmake_minimum_required(VERSION 3.4.1)
112
+ set(CMAKE_SKIP_BUILD_RPATH TRUE)
113
+ set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
114
+ set(NODE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../node_modules")
115
+ + set(OH_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
116
+ set(RNOH_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../react-native-harmony/harmony/cpp")
117
+ set(LOG_VERBOSITY_LEVEL 1)
118
+ set(CMAKE_ASM_FLAGS "-Wno-error=unused-command-line-argument -Qunused-arguments")
119
+ set(CMAKE_CXX_FLAGS "-fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIE -pie")
120
+ set(WITH_HITRACE_SYSTRACE 1) # for other CMakeLists.txt files to use
121
+ add_compile_definitions(WITH_HITRACE_SYSTRACE)
122
+
123
+ add_subdirectory("${RNOH_CPP_DIR}" ./rn)
124
+
125
+ # RNOH_BEGIN: manual_package_linking_1
126
+ add_subdirectory("../../../../sample_package/src/main/cpp" ./sample-package)
127
+
128
+ + add_subdirectory("${OH_MODULES}/@react-native-ohos/react-native-keyboard-controller/src/main/cpp" ./keyboard-controller)
129
+
130
+ # RNOH_END: manual_package_linking_1
131
+
132
+ file(GLOB GENERATED_CPP_FILES "./generated/*.cpp")
133
+
134
+ add_library(rnoh_app SHARED
135
+ ${GENERATED_CPP_FILES}
136
+ "./PackageProvider.cpp"
137
+ "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
138
+ )
139
+ target_link_libraries(rnoh_app PUBLIC rnoh)
140
+
141
+ # RNOH_BEGIN: manual_package_linking_2
142
+ target_link_libraries(rnoh_app PUBLIC rnoh_sample_package)
143
+ + target_link_libraries(rnoh_app PUBLIC rnoh_keyboard_controller)
144
+ # RNOH_END: manual_package_linking_2
145
+ ```
146
+
147
+ 打开 `entry/src/main/cpp/PackageProvider.cpp`,添加:
148
+
149
+ ```diff
150
+ #include "RNOH/PackageProvider.h"
151
+ #include "generated/RNOHGeneratedPackage.h"
152
+ #include "SamplePackage.h"
153
+ + #include "keyboardControllerPackage.h"
154
+
155
+ using namespace rnoh;
156
+
157
+ std::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {
158
+ return {
159
+ std::make_shared<RNOHGeneratedPackage>(ctx),
160
+ std::make_shared<SamplePackage>(ctx),
161
+ + std::make_shared<KeyboardControllerPackage>(ctx),
162
+ };
163
+ }
164
+ ```
165
+
166
+ ### 在 ArkTS 侧引入 RNKeyboardControllerPackage
167
+
168
+ 打开 `entry/src/main/ets/RNPackagesFactory.ts`,添加:
169
+
170
+ ```diff
171
+ + import { RNKeyboardControllerPackage } from "@react-native-ohos/react-native-keyboard-controller/ts";
172
+
173
+ export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
174
+ return [
175
+ new SamplePackage(ctx),
176
+ + new RNKeyboardControllerPackage(ctx)
177
+ ];
178
+ }
179
+ ```
180
+ </details>
181
+
182
+ ### 运行
183
+
184
+ 点击右上角的 `sync` 按钮
185
+
186
+ 或者在终端执行:
187
+
188
+ ```bash
189
+ cd entry
190
+ ohpm install
191
+ ```
192
+
193
+ 然后编译、运行即可。
194
+
195
+ ## 约束与限制
196
+
197
+ ### 兼容性
198
+
199
+ 要使用此库,需要使用正确的 React-Native 和 RNOH 版本。另外,还需要使用配套的 DevEco Studio 和 手机 ROM。
200
+
201
+ 在以下版本验证通过:
202
+
203
+ 1. RNOH: 0.82.20; SDK: HarmonyOS 6.0.1 Release SDK; IDE: DevEco Studio 6.0.1 Release; ROM: 6.0.0.120 SP7;
204
+
205
+ ### 编译运行API要求
206
+
207
+ > [!TIP] 当前分支版本支持在 `API12+` 工程编译,及 `API12+` ROM运行。
208
+
209
+ > [!TIP] 以下功能依赖特定版本的API,使用 `低于指定API版本的工程编译` 或 `低于指定API版本的ROM运行` 均可能导致部分功能受限。
210
+ 1. 版本 >=1.17.0 for 0.82引入[OH_ArkUI_FocusRequest](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-interface-focus-h#oh_arkui_focusrequest),实现了 `onNextCallback?: (event: GestureResponderEvent) => void` 和 `onPrevCallback?: (event: GestureResponderEvent) => void` 功能,此API需要在支持`API15+`的工程编译,并在支持`API15+`的ROM上运行,方可生效。
211
+ 2. 版本 >=1.17.0 for 0.82引入了[on('keyboardWillShow')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillshow20)和[on('keyboardWillHide')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillhide20),实现了`KeyboardEvents`中的`keyboardWillShow`键盘将要显示事件和`keyboardWillHide`键盘将要隐藏事件功能,这些API需要在支持`API20+`的工程编译,并在支持`API20+`的ROM上运行,方可生效。
212
+
213
+ ## 使用示例
214
+
215
+ 下面的代码展示了这个库的基本使用场景:
216
+
217
+ > [!WARNING] 使用时 import 的库名不变。
218
+
219
+ ```js
220
+ import React from 'react';
221
+ import { Text, View, TextInput, TouchableOpacity } from 'react-native';
222
+ import { KeyboardAvoidingView, KeyboardProvider } from 'react-native-keyboard-controller';
223
+
224
+ function App() {
225
+ return (
226
+ <KeyboardProvider>
227
+ <KeyboardAvoidingView
228
+ style={{
229
+ padding: 22,
230
+ flex: 1,
231
+ justifyContent: 'space-between',
232
+ }}>
233
+ <Text
234
+ style={{
235
+ color: 'black',
236
+ fontSize: 25,
237
+ marginTop: 100,
238
+ fontWeight: '500',
239
+ }}>
240
+ react-native-keyboard-controller
241
+ </Text>
242
+ <View>
243
+ <TextInput
244
+ placeholder="Username"
245
+ placeholderTextColor="#7C7C7C"
246
+ style={{
247
+ height: 45,
248
+ borderColor: '#000000',
249
+ borderWidth: 1,
250
+ borderRadius: 10,
251
+ marginBottom: 36,
252
+ paddingLeft: 10,
253
+ }}
254
+ />
255
+ <TextInput
256
+ placeholder="Password"
257
+ placeholderTextColor="#7C7C7C"
258
+ style={{
259
+ height: 45,
260
+ borderColor: '#000000',
261
+ borderWidth: 1,
262
+ borderRadius: 10,
263
+ marginBottom: 36,
264
+ paddingLeft: 10,
265
+ }}
266
+ />
267
+ <TouchableOpacity
268
+ style={{
269
+ marginTop: 40,
270
+ height: 45,
271
+ borderRadius: 10,
272
+ backgroundColor: 'rgb(40, 64, 147)',
273
+ justifyContent: 'center',
274
+ alignItems: 'center',
275
+ }}>
276
+ <Text style={{ fontWeight: '500', fontSize: 16, color: 'white' }}>
277
+ Submit
278
+ </Text>
279
+ </TouchableOpacity>
280
+ </View>
281
+ </KeyboardAvoidingView>
282
+ </KeyboardProvider>
283
+ );
284
+ }
285
+
286
+ export default App;
287
+ ```
288
+
289
+ ## API
290
+
291
+ > [!TIP] "Platform"列表示该属性在原三方库上支持的平台。
292
+
293
+ > [!TIP] "HarmonyOS Support"列为 yes 表示 HarmonyOS 平台支持该属性;no 则表示不支持;partially 表示部分支持。使用方法跨平台一致,效果对标 iOS 或 Android 的效果。
294
+
295
+ **Hooks**:键盘控制器相关的钩子函数
296
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
297
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
298
+ | useKeyboardAnimation | 获取键盘动画值的钩子函数 | `() => AnimatedContext` | no | iOS,Android | yes |
299
+ | useReanimatedKeyboardAnimation | 获取键盘动画值的钩子函数 | `() => ReanimatedContext` | no | iOS,Android | yes |
300
+ | useKeyboardHandler | 设置键盘回调事件的钩子函数 | `(handler: KeyboardHandler, deps?: DependencyList) => void` | no | iOS,Android | yes |
301
+ | useKeyboardController | 设置是否启动键盘监听事件的钩子函数 | `() => { setEnabled: React.Dispatch<React.SetStateAction<boolean>>; enabled: boolean }` | no | iOS,Android | yes |
302
+ | useFocusedInputHandler | 设置监听输入框回调事件的钩子函数(HarmonyOS暂支持文本变化的监听) | `(handler?: FocusedInputHandler, deps?: DependencyList) => void` | no | iOS,Android | partially |
303
+ | useReanimatedFocusedInput | 当前聚焦的输入控件文本变化事件回调的钩子函数,update()用于主动同步当前聚焦输入框布局 | `() => { input: SharedValue<FocusedInputLayoutChangedEvent \| null>; update: () => Promise<void> }` | no | iOS,Android |yes |
304
+ | useKeyboardState(selector?) | 响应式读取完整键盘状态;传入selector时仅订阅并返回所需字段 | `<T>(selector?: (state: IKeyboardState) => T) => T` | no | iOS,Android | yes |
305
+ | useAnimatedKeyboard() | 返回键盘高度和状态对应的SharedValue | `() => { height: SharedValue<number>; state: SharedValue<number> }` | no | iOS,Android | yes |
306
+ | useResizeMode | 组件挂载时将 Android 输入模式设置为 `adjustResize`,卸载时恢复默认模式 | `() => void` | no | Android | no |
307
+ | useGenericKeyboardHandler | 注册键盘生命周期回调,不修改 Android 输入模式;HarmonyOS 原生仅支持 `onEnd`,`onStart`、`onMove` 不是原生事件,`onInteractive` 不支持 | `(handler: KeyboardHandler, deps?: DependencyList) => void` | no | iOS,Android | partially |
308
+ | useWindowDimensions | 使用 React Native 通用实现读取并监听窗口宽高变化 | `() => ScaledSize` | no | iOS,Android | yes |
309
+ | useKeyboardContext | 读取 `KeyboardProvider` 提供的键盘上下文,用于构建自定义 Hook;建议业务优先使用上层 Hooks | `() => KeyboardAnimationContext` | no | iOS,Android | yes |
310
+
311
+ **KeyboardController**:键盘控制器
312
+
313
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
314
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
315
+ | setInputMode(mode: number): void | 设置键盘显示默认模式 | function | no | Android | no |
316
+ | setDefaultMode(): void | 设置键盘显示默认模式 | function | no | Android | no |
317
+ | dismiss(options?: Partial&lt;DismissOptions&gt;): Promise&lt;void&gt; | 设置键盘隐藏。`DismissOptions` 包含 `keepFocus` 和 `animated`。HarmonyOS 可以隐藏键盘;由于 HarmonyOS 缺少保持聚焦输入框的相关能力,`keepFocus` 参数暂不支持;同时不支持无动画关闭键盘。 | `Promise<void>` | no | iOS,Android | partially |
318
+ | setFocusTo(direction: "next" \| "prev" \| "current"): void | 将焦点移动到下一个、上一个或当前输入框;HarmonyOS 支持 `next`/`prev`,`current` 尚不支持 | function | no | iOS,Android | no |
319
+ | addListener: (eventName: string) => void | 添加键盘的监听事件 | function | no | iOS,Android | yes |
320
+ | removeListeners: (count: number) => void | 删除键盘的监听事件 | function | no | iOS,Android | yes |
321
+ | isVisible(): boolean | 返回键盘是否可见 | function | no | iOS,Android | yes |
322
+ | state(): KeyboardEventData | 返回键盘最后的状态 | function | no | iOS,Android | yes |
323
+ | preload(): void | 预加载键盘以减少首次聚焦时的延迟 | function | no | iOS | no |
324
+
325
+ **AndroidSoftInputModes**:Android `windowSoftInputMode` 的公共枚举,用于向 `setInputMode` 传入输入法窗口调整模式。HarmonyOS 不适用。
326
+
327
+ | Name | Value | Description | Platform | HarmonyOS Support |
328
+ | ---- | ----- | ----------- | -------- | ----------------- |
329
+ | `SOFT_INPUT_ADJUST_NOTHING` | 48 | 键盘显示时不调整窗口 | Android | no |
330
+ | `SOFT_INPUT_ADJUST_PAN` | 32 | 键盘显示时平移窗口 | Android | no |
331
+ | `SOFT_INPUT_ADJUST_RESIZE` | 16 | 键盘显示时调整窗口可用区域大小 | Android | no |
332
+ | `SOFT_INPUT_ADJUST_UNSPECIFIED` | 0 | 由系统自动选择窗口调整方式 | Android | no |
333
+ | `SOFT_INPUT_IS_FORWARD_NAVIGATION` | 256 | 表示窗口由向前导航进入 | Android | no |
334
+ | `SOFT_INPUT_MASK_ADJUST` | 240 | 窗口调整方式的位掩码 | Android | no |
335
+ | `SOFT_INPUT_MASK_STATE` | 15 | 键盘初始状态的位掩码 | Android | no |
336
+ | `SOFT_INPUT_MODE_CHANGED` | 512 | 表示输入模式已经变化 | Android | no |
337
+ | `SOFT_INPUT_STATE_ALWAYS_HIDDEN` | 3 | 窗口获得焦点时始终隐藏键盘 | Android | no |
338
+ | `SOFT_INPUT_STATE_ALWAYS_VISIBLE` | 5 | 窗口获得焦点时始终显示键盘 | Android | no |
339
+ | `SOFT_INPUT_STATE_HIDDEN` | 2 | 窗口获得焦点时隐藏键盘 | Android | no |
340
+ | `SOFT_INPUT_STATE_UNCHANGED` | 1 | 保持键盘当前显示状态 | Android | no |
341
+ | `SOFT_INPUT_STATE_UNSPECIFIED` | 0 | 由系统决定键盘初始显示状态 | Android | no |
342
+ | `SOFT_INPUT_STATE_VISIBLE` | 4 | 窗口获得焦点时显示键盘 | Android | no |
343
+
344
+ **KeyboardState**:`useAnimatedKeyboard()` 使用的键盘状态常量。
345
+
346
+ | Name | Value | Description | HarmonyOS Support |
347
+ | ---- | ----- | ----------- | ----------------- |
348
+ | `UNKNOWN` | 0 | 键盘状态未知 | yes |
349
+ | `OPENING` | 1 | 键盘正在打开 | yes |
350
+ | `OPEN` | 2 | 键盘已经打开 | yes |
351
+ | `CLOSING` | 3 | 键盘正在关闭 | yes |
352
+ | `CLOSED` | 4 | 键盘已经关闭 | yes |
353
+
354
+ **公共常量**
355
+
356
+ | Name | Description | Type | Platform | HarmonyOS Support |
357
+ | ---- | ----------- | ---- | -------- | ----------------- |
358
+ | `KEYBOARD_BORDER_RADIUS` | 键盘圆角半径;Android、iOS 26 以下及 iOS 26+ 兼容模式返回 `0`,iOS 26+ 新式键盘返回 `30`;HarmonyOS 与 Android 一致返回 `0` | number | iOS,Android | yes |
359
+
360
+ **StatusBarManagerCompat**:状态栏控制器
361
+
362
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
363
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
364
+ | setHidden(hidden: boolean): void | 设置状态栏隐藏不可见 | function | no | Android | yes |
365
+ | setColor(color: number, animated: boolean): void | 设置状态栏背景颜色 | function | no | Android | yes |
366
+ | setTranslucent(translucent: boolean): void | 设置状态栏是否透明 | function | no | Android | no |
367
+ | setStyle(style: string): void | 设置状态栏的内容颜色 | function | no | Android | yes |
368
+
369
+ **KeyboardEvents**:监听键盘事件
370
+
371
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
372
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
373
+ | keyboardWillShow | 键盘将要显示事件 | string | no | iOS,Android | yes |
374
+ | keyboardDidShow | 键盘已经显示事件 | string | no | iOS,Android | yes |
375
+ | keyboardWillHide | 键盘将要隐藏事件 | string | no | iOS,Android | yes |
376
+ | keyboardDidHide | 键盘已经隐藏事件 | string | no | iOS,Android | yes |
377
+
378
+ **FocusedInputEvents**:监听聚焦输入框事件
379
+
380
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
381
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
382
+ | focusDidSet | 聚焦输入框事件类型 | string | no | iOS,Android | no |
383
+
384
+ **WindowDimensionsEvents**:监听窗口布局变化事件
385
+
386
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
387
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
388
+ | windowDidResize | 监听窗口事件 | string | no | Android | no |
389
+
390
+
391
+
392
+
393
+ ### 组件
394
+
395
+ **KeyboardProvider**:为子组件提供键盘监听、动画状态及运行时控制上下文。其 `KeyboardProviderProps` 类型包含以下属性。
396
+
397
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
398
+ | ---- | ----------- | ---- | -------- | -------- | ----------------- |
399
+ | `children` | Provider 包裹的子组件 | `React.ReactNode` | yes | iOS,Android | yes |
400
+ | `enabled` | 是否在初始化时开启键盘监听,默认值为 `true` | boolean | no | iOS,Android | yes |
401
+ | `statusBarTranslucent` | 是否使用透明状态栏,默认值为 `false` | boolean | no | Android | no |
402
+ | `navigationBarTranslucent` | 是否使用透明导航栏,默认值为 `false` | boolean | no | Android | no |
403
+ | `preserveEdgeToEdge` | 是否始终保持 edge-to-edge 模式,默认值为 `false` | boolean | no | Android | yes |
404
+ | `preload` | 是否预加载键盘以减少首次聚焦延迟,默认值为 `true`; | boolean | no | iOS | no |
405
+
406
+ **KeyboardControllerView**:键盘控制器
407
+
408
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
409
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
410
+ | enabled | 是否开启键盘监听事件 | boolean | no | iOS,Android | yes |
411
+ | statusBarTranslucent | 状态栏是否透明 | boolean | no | Android | no |
412
+ | navigationBarTranslucent | 导航栏是否透明 | boolean | no | Android | no |
413
+ | preserveEdgeToEdge | 是否edge-to-edge模式 | boolean | no | Android | yes |
414
+ | onKeyboardMoveStart?: DirectEventHandler < KeyboardMoveEvent > | 键盘开始移动的监听事件 | function | no | iOS,Android | no |
415
+ | onKeyboardMove?: DirectEventHandler< KeyboardMoveEvent > | 键盘移动中的监听事件 | function | no | iOS,Android | no |
416
+ | onKeyboardMoveEnd?: DirectEventHandler< KeyboardMoveEvent > | 键盘移动结束的监听事件 | function | no | iOS,Android | yes |
417
+ | onKeyboardMoveInteractive?: DirectEventHandler< KeyboardMoveEvent > | 键盘移动交互的监听事件 | function | no | iOS,Android | no |
418
+ | onFocusedInputLayoutChanged?: DirectEventHandler < FocusedInputLayoutChangedEvent > | 聚焦输入框位置坐标变化的监听事件 | function | no | iOS,Android | yes |
419
+ | onFocusedInputTextChanged?: DirectEventHandler< FocusedInputTextChangedEvent> | 聚焦输入框文本变化的监听事件 | function | no | iOS,Android | yes |
420
+ | onFocusedInputSelectionChanged?: DirectEventHandler< FocusedInputSelectionChangedEvent> | 聚焦输入框文本选择的监听事件(HarmonyOS暂支持选区的position,选区坐标默认为0) | function | no | iOS,Android | partially |
421
+ | style | `KeyboardControllerView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
422
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
423
+
424
+ **KeyboardGestureArea**:手势控制键盘组件
425
+
426
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
427
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
428
+ | showOnSwipeUp | 键盘随手势向上滑动显示 | boolean | no | Android | no |
429
+ | enableSwipeToDismiss | 键盘随手势向下滑动隐藏 | boolean | no | Android | no |
430
+ | interpolator | 设置键盘随手势滑动的动画模式 | `"ios" \| "linear"` | no | Android | no |
431
+ | offset | 到键盘的额外距离 | number | no | iOS、Android | no |
432
+ | textInputNativeID | TextInput对应的nativeID | string | no | iOS | no |
433
+
434
+ **KeyboardAvoidingView**:键盘控制器的容器组件
435
+
436
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
437
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
438
+ | behavior | 键盘弹起时视图样式变化的模式(HarmonyOS暂支持position) | `"height" \| "position" \| "padding" \| "translate-with-padding"` | no | iOS,Android | partially |
439
+ | contentContainerStyle | 当`behavior`为position时,内容容器的样式 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
440
+ | enabled | 控制这个`KeyboardAvoidingView`实例是否应该生效,默认为true | boolean | no | iOS,Android | yes |
441
+ | keyboardVerticalOffset | 键盘与React Native视图之间的距离,默认为`0` | number | no | iOS,Android | yes |
442
+ | automaticOffset | 是否自动测量组件在窗口中的坐标并参与键盘避让,默认为`false` | boolean | no | iOS,Android | yes |
443
+ | onLayout | 在安装和布局更改时的回调函数(event: LayoutChangeEvent) => void | function/undefined | no | iOS,Android | yes |
444
+ | style | `KeyboardAvoidingView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
445
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
446
+
447
+ **KeyboardAwareScrollView**:滚动键盘控制器的容器组件
448
+
449
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
450
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
451
+ | bottomOffset | 显示键盘时,键盘与焦点`TextInput`之间的距离。默认值为“0” | number | no | iOS,Android | yes |
452
+ | enabled | 控制此`KeyboardAwareScrollView`实例是否应生效。默认值为`true` | boolean | no | iOS,Android | yes |
453
+ | disableScrollOnKeyboardHide |防止键盘隐藏时`ScrollView`自动滚动,保持当前屏幕位置。默认值为`false`。 | boolean | no | iOS,Android | no |
454
+ | extraKeyboardSpace | KeyboardAwareScrollView的底部间距,默认为0 | number | no | iOS,Android | no |
455
+ | mode | 选择使用`insets`或`layout`方式创建键盘空间,默认为`insets` | "insets" / "layout" | no | iOS,Android | no |
456
+ | assureFocusedInputVisible() | 主动重新执行当前聚焦输入框的避让 | function | no | iOS,Android | no |
457
+ | onLayout | 在安装和布局更改时的回调函数(event: LayoutChangeEvent) => void | function/undefined | no | iOS,Android | yes |
458
+ | style | `KeyboardAwareScrollView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
459
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
460
+ | ScrollViewComponent | ScrollView的自定义组件 | React.ComponentType<ScrollViewProps> | no | iOS,Android | yes |
461
+
462
+ **KeyboardChatScrollView**:面向聊天场景的键盘感知滚动容器组件,用于在键盘显示或隐藏时联动调整消息列表的底部空间和滚动位置
463
+
464
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
465
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
466
+ | ScrollViewComponent | 注入自定义动画`ScrollView`实现,默认使用`Reanimated.ScrollView` | AnimatedScrollViewComponent | no | iOS,Android | yes |
467
+ | inverted | 是否使用反转列表方向,默认为`false` | boolean | no | iOS,Android | yes |
468
+ | offset | `ScrollView`底部与屏幕底部之间的距离;键盘弹起时按键盘高度减去该距离计算有效抬升量,默认为`0` | number | no | iOS,Android | yes |
469
+ | keyboardLiftBehavior | 设置键盘弹起时消息列表的抬升策略,默认为`always`。 | "always" / "whenAtEnd" / "persistent" / "never" | no | iOS,Android | yes |
470
+ | freeze | 冻结键盘驱动的padding、offset和滚动更新,默认为`false` | boolean / SharedValue&lt;boolean&gt; | no | iOS,Android | yes |
471
+ | extraContentPadding | 外部元素产生的动态额外内容边距 | SharedValue&lt;number&gt; | no | iOS,Android | no |
472
+ | blankSpace | 设置内容的最小inset空间,键盘空间和额外边距不会使总边距低于该值 | SharedValue&lt;number&gt; | no | iOS,Android | no |
473
+ | applyWorkaroundForContentInsetHitTestBug | iOS `contentInset`触摸问题的兼容开关,默认为`false` | boolean | no | iOS | no |
474
+ | onContentInsetChange | 内容inset发生变化时的回调函数(insets) => void | function | no | iOS,Android | no |
475
+ | onEndVisible | 内容末端进入或离开可见区域时的回调函数(visible: boolean) => void | function | no | iOS,Android | no |
476
+
477
+ **KeyboardStickyView**:随键盘移动的粘性视图组件
478
+
479
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
480
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
481
+ | enabled | 是否激活组件 | boolean | no | iOS,Android | yes |
482
+ | offset | 为给定的键盘状态指定视图的附加偏移 | {closed?: number;opened?: number;} | no | iOS,Android | yes |
483
+ | style | `KeyboardStickyView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
484
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
485
+
486
+ **KeyboardToolbar**:显示在键盘上方的组件,带有 `Prev`/`Next` 和“完成”按钮。
487
+
488
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
489
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
490
+ | `DefaultKeyboardToolbarTheme` | 可直接作为 `KeyboardToolbar` 的 `theme` 属性传入,也可以复制后修改颜色创建自定义主题。该常量为 JavaScript 主题配置。 | `constant` | no | iOS,Android | yes |
491
+ | enabled | 是否激活组件 | boolean | no | iOS,Android | yes |
492
+ | offset | 为给定的键盘状态指定视图的附加偏移 | {closed?: number;opened?: number;} | no | iOS,Android | yes |
493
+ | theme | 工具栏组件使用的一组深色/浅色主题 | {light: Theme; dark: Theme;} | no | iOS,Android | yes |
494
+ | content |显示在工具栏中间的元素 | JSX.Element | no | iOS,Android | yes |
495
+ | doneText | 完成按钮的自定义文本 | React.ReactNode | no | iOS,Android | yes |
496
+ | button | 工具栏的自定义可触摸组件(用于prev/next/done按钮) | React.ReactNode | no | iOS,Android | yes |
497
+ | icon | 用于显示next/prev按钮的自定义图标组件 | React.ReactNode | no | iOS,Android | yes |
498
+ | showArrows | 是否显示下一个和上一个按钮 | boolean | no | iOS,Android | yes |
499
+ | blur | 工具栏聚焦时标题组件 | JSX.Element | no | iOS,Android | yes |
500
+ | opacity | 十六进制格式的容器不透明度值(例如`ff`)。默认值为`ff` | HEX | no | iOS,Android | yes |
501
+ | onNextCallback?: (event: GestureResponderEvent) => void | 当用户按下“下一步”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
502
+ | onPrevCallback?: (event: GestureResponderEvent) => void | 用户按下“上一步”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
503
+ | onDoneCallback?: (event: GestureResponderEvent) => void | 当用户按下“完成”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
504
+ | insets | 工具栏左右两侧的安全区域边距 | {left: number;right: number;} | no | iOS,Android | yes |
505
+ | children | 组合式Toolbar的JSX子组件入口 | React.ReactNode | no | iOS,Android | yes |
506
+
507
+ **KeyboardToolbar Compound**:`KeyboardToolbar`的组合式API,通过静态子组件分别定义背景、中间内容和操作按钮。
508
+
509
+ `KeyboardToolbar.Background`、`KeyboardToolbar.Content`、`KeyboardToolbar.Prev`、`KeyboardToolbar.Next`和`KeyboardToolbar.Done`需要作为`KeyboardToolbar`的直接子组件。
510
+
511
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
512
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
513
+ | KeyboardToolbar.Background | 设置工具栏背景内容,`children`为必选 | React.FC&lt;{children: React.ReactNode;}&gt; | no | iOS,Android | yes |
514
+ | KeyboardToolbar.Content | 设置工具栏中间的内容区域 | React.FC&lt;ViewProps &amp; {children?: React.ReactNode;}&gt; | no | iOS,Android | yes |
515
+ | KeyboardToolbar.Prev | 上一个输入框按钮; | React.FC&lt;ButtonSubProps&gt; | no | iOS,Android | yes |
516
+ | KeyboardToolbar.Next | 下一个输入框按钮; | React.FC&lt;ButtonSubProps&gt; | no | iOS,Android | yes |
517
+ | KeyboardToolbar.Done | 隐藏键盘按钮; | React.FC&lt;Omit&lt;ButtonSubProps, "icon"&gt; &amp; {text?: React.ReactNode;}&gt; | no | iOS,Android | yes |
518
+
519
+ **KeyboardToolbar.Group**:输入框分组组件。该组件作为`KeyboardToolbar`的静态成员导出,但不属于Compound内容组件;应包裹需要分组的输入框,限定Prev/Next按钮仅在当前分组内遍历。
520
+
521
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
522
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
523
+ | KeyboardToolbar.Group | 包裹一组需要限制焦点遍历范围的输入框 | React.FC&lt;KeyboardToolbarGroupViewProps&gt; | no | iOS,Android | yes |
524
+
525
+ **KeyboardBackgroundView**:匹配键盘区域背景的视图组件
526
+
527
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
528
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
529
+ | KeyboardBackgroundView | 匹配键盘区域的背景视图 | React.FC&lt;KeyboardBackgroundViewProps&gt; | no | iOS,Android | no |
530
+
531
+ **KeyboardExtender**:将子内容附着到键盘区域,并显示在键盘系统按钮上方的容器组件
532
+
533
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
534
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
535
+ | KeyboardExtender | 将子内容附着到键盘区域,并显示在键盘系统按钮上方 | React.FC&lt;KeyboardExtenderProps&gt; | no | iOS,Android | yes |
536
+ | enabled | 控制扩展区域是否跟随键盘生效,默认为`true` | boolean | no | iOS,Android | yes |
537
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
538
+
539
+ **OverKeyboardView**:覆盖在键盘上的容器组件
540
+
541
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
542
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
543
+ | visible | 是否显示组件 | boolean | no | iOS,Android | No |
544
+
545
+ ## 遗留问题
546
+
547
+ - [ ] 暂不支持KeyboardControllerView中onKeyboardMoveStart,onKeyboardMove,onKeyboardMoveInteractive事件的回调:[ issue#1 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/1)
548
+ - [ ] 暂不支持KeyboardGestureArea组件:[issue#2 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/2)
549
+ - [ ] 暂不支持KeyboardController中setFocusTo,FocusedInputEvents中focusDidSet:[issue#3 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/3)
550
+ - [ ] 暂不支持KeyboardAwareScrollView组件属性disableScrollOnKeyboardHide、extraKeyboardSpace的设置[#issue#16](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/16)
551
+ - [ ] KeyboardControllerView中onFocusedInputSelectionChanged事件部分支持,HarmonyOS暂支持选区的position,选区坐标默认为0:[issue#13](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/13)
552
+ - [ ] KeyboardAvoidingView属性behavior支持position, 不支持高度height、padding的样式[#issue#13](https://github.com/react-native-oh-library/react-native-harmony-reanimated/issues/13)
553
+ - [ ] 暂不支持OverKeyboardView接口:[issue#27](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/27)
554
+ - [ ] 暂不支持KeyboardChatScrollView的onEndVisible、onContentInsetChange回调以及extraContentPadding、blankSpace属性
555
+ - [ ] 暂不支持KeyboardAwareScrollView Ref的assureFocusedInputVisible()方法和mode属性
556
+ - [ ] 暂不支持KeyboardBackgroundView组件
557
+ - [ ] 暂不支持 Hook 方法 `useResizeMode`。
558
+ - [ ] Hook 方法 `useGenericKeyboardHandler` 部分支持:HarmonyOS 原生仅支持 `onEnd`,`onStart`、`onMove` 不是原生事件,`onInteractive` 不支持。
559
+ - [ ] 暂不支持 `KeyboardProvider` 的 `statusBarTranslucent` 和 `navigationBarTranslucent` 属性。
560
+ ## 其他
561
+
562
+
563
+
564
+ ## 目录结构
565
+
566
+ ```text
567
+ /rntpc_react-native-keyboard-controller # 项目根目录
568
+ │ LICENSE
569
+ │ OAT.xml
570
+ │ package.json # NPM、Bob、Codegen 与 HarmonyOS Autolink 配置
571
+ │ README.md
572
+ │ README.OpenSource
573
+ │ buildEnv.sh
574
+ │ tsconfig.json
575
+ │ tsconfig.build.json
576
+
577
+ ├─example # React Native / HarmonyOS 示例工程
578
+ │ │ app.json
579
+ │ │ index.js
580
+ │ │ package.json
581
+ │ │
582
+ │ ├─src
583
+ │ │ index.tsx # 示例业务入口
584
+ │ │
585
+ │ └─harmony # HarmonyOS 示例宿主工程
586
+ │ └─entry
587
+ │ └─src
588
+ │ └─main
589
+ │ │ module.json5
590
+ │ ├─cpp
591
+ │ │ CMakeLists.txt
592
+ │ │ PackageProvider.cpp # C++ Package 注册入口
593
+ │ └─ets
594
+ │ │ RNPackagesFactory.ets # ArkTS Package 注册入口
595
+ │ ├─entryability
596
+ │ │ EntryAbility.ets
597
+ │ └─pages
598
+ │ Index.ets
599
+
600
+ ├─harmony
601
+ │ │ keyboard_controller.har # 编译后的 HAR 包
602
+ │ │
603
+ │ └─keyboard_controller # HarmonyOS 适配核心代码
604
+ │ │ build-profile.json5
605
+ │ │ hvigorfile.ts
606
+ │ │ Index.ets # HAR 对外导出入口
607
+ │ │ obfuscation-rules.txt
608
+ │ │ oh-package.json5
609
+ │ │ ts.ets # RNOH 代码生成配置入口
610
+ │ │
611
+ │ └─src
612
+ │ └─main
613
+ │ │ module.json
614
+ │ │ module.json5
615
+ │ │
616
+ │ ├─cpp # RNOH C++ / Fabric 原生层
617
+ │ │ │ CMakeLists.txt
618
+ │ │ │ RNKeyboardControllerPackage.cpp
619
+ │ │ │ RNKeyboardControllerPackage.h
620
+ │ │ │ keyboardControllerPackage.cpp
621
+ │ │ │ keyboardControllerPackage.h
622
+ │ │ │ RNKeyboardController.cpp # KeyboardController TurboModule 映射
623
+ │ │ │ RNKeyboardController.h
624
+ │ │ │ RNStatusBarManagerCompat.cpp
625
+ │ │ │ RNStatusBarManagerCompat.h
626
+ │ │ │ EventEmitters.cpp
627
+ │ │ │ EventEmitters.h
628
+ │ │ │ ViewHierarchyNavigator.cpp # 输入框层级遍历与焦点导航
629
+ │ │ │ ViewHierarchyNavigator.h
630
+ │ │ │
631
+ │ │ ├─KeyboardControllerViewComponentInstance.cpp
632
+ │ │ ├─KeyboardControllerViewComponentInstance.h
633
+ │ │ ├─KeyboardControllerViewComponentDescriptor.h
634
+ │ │ ├─KeyboardControllerViewJSIBinder.h
635
+ │ │ ├─KeyboardGestureAreaComponentInstance.cpp
636
+ │ │ ├─KeyboardGestureAreaComponentInstance.h
637
+ │ │ ├─KeyboardGestureAreaComponentDescriptor.h
638
+ │ │ └─KeyboardGestureAreaJSIBinder.h
639
+ │ │
640
+ │ ├─ets # ArkTS TurboModule 业务层
641
+ │ │ Logger.ts
642
+ │ │ Type.ts
643
+ │ │ RNKeyboardControllerPackage.ets
644
+ │ │ RNKeyboardControllerTurboModule.ts
645
+ │ │ RNStatusBarManagerCompatTurboModule.ts
646
+ │ │
647
+ │ └─resources # 多语言字符串资源
648
+
649
+ └─src # JavaScript / TypeScript 公共层
650
+ │ index.ts # 库统一导出入口
651
+ │ bindings.ts
652
+ │ bindings.native.ts # 原生模块、事件与 Fabric 组件绑定
653
+ │ animated.tsx # 键盘动画值与事件处理
654
+ │ context.ts # KeyboardProvider 上下文
655
+ │ constants.ts
656
+ │ internal.ts
657
+ │ reanimated.ts
658
+ │ reanimated.native.ts
659
+ │ types.ts
660
+ │ utils.ts
661
+
662
+ ├─specs # TurboModule / Fabric Codegen 规格
663
+ │ NativeKeyboardController.ts
664
+ │ NativeStatusBarManagerCompat.ts
665
+ │ KeyboardControllerViewNativeComponent.ts
666
+ │ KeyboardGestureAreaNativeComponent.ts
667
+
668
+ ├─hooks
669
+ │ └─useWindowDimensions
670
+ │ index.ts
671
+ │ index.android.ts
672
+
673
+ └─components
674
+ ├─KeyboardAvoidingView # 键盘避让容器
675
+ ├─KeyboardAwareScrollView # 键盘感知滚动容器
676
+ ├─KeyboardStickyView # 随键盘移动的粘性视图
677
+ └─KeyboardToolbar # 键盘工具栏
678
+ ```
679
+
680
+ ## 贡献代码
681
+
682
+ 使用过程中发现任何问题都可以提交 [Issue](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/issues),也欢迎提交 [PR](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/pulls)。
683
+
684
+ ## 开源协议
685
+
686
+ 本项目基于 [The MIT License (MIT)](https://github.com/kirillzyusko/react-native-keyboard-controller/blob/main/LICENSE) ,请自由地享受和参与开源。