[
{
"table_index": 1,
"rows": [
{
"Android 事件": "`onTouchEvent(MotionEvent)`",
"HarmonyOS 事件": "`onTouch(event: TouchEvent)`",
"映射说明": "直接映射",
"代码示例对比": "Android: `view.onTouchEvent(event)`<br/>HarmonyOS: `Component().onTouch((event) => {})`"
},
{
"Android 事件": "`onInterceptTouchEvent(MotionEvent)`",
"HarmonyOS 事件": "`onTouchIntercept(event: TouchEvent)`",
"映射说明": "直接映射",
"代码示例对比": "Android: `viewGroup.onInterceptTouchEvent(event)`<br/>HarmonyOS: `Container().onTouchIntercept((event) => {})`"
},
{
"Android 事件": "`dispatchTouchEvent(MotionEvent)`",
"HarmonyOS 事件": "事件分发机制",
"映射说明": "架构差异",
"代码示例对比": "Android: 手动分发<br/>HarmonyOS: 自动分发 + 手势系统"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 事件",
"映射说明",
"代码示例对比"
],
[
"`onTouchEvent(MotionEvent)`",
"`onTouch(event: TouchEvent)`",
"直接映射",
"Android: `view.onTouchEvent(event)`<br/>HarmonyOS: `Component().onTouch((event) => {})`"
],
[
"`onInterceptTouchEvent(MotionEvent)`",
"`onTouchIntercept(event: TouchEvent)`",
"直接映射",
"Android: `viewGroup.onInterceptTouchEvent(event)`<br/>HarmonyOS: `Container().onTouchIntercept((event) => {})`"
],
[
"`dispatchTouchEvent(MotionEvent)`",
"事件分发机制",
"架构差异",
"Android: 手动分发<br/>HarmonyOS: 自动分发 + 手势系统"
]
]
},
{
"table_index": 2,
"rows": [
{
"Android Action": "`ACTION_DOWN`",
"HarmonyOS 触摸类型": "`TouchType.Down`",
"映射说明": "手指按下"
},
{
"Android Action": "`ACTION_UP`",
"HarmonyOS 触摸类型": "`TouchType.Up`",
"映射说明": "手指抬起"
},
{
"Android Action": "`ACTION_MOVE`",
"HarmonyOS 触摸类型": "`TouchType.Move`",
"映射说明": "手指移动"
},
{
"Android Action": "`ACTION_CANCEL`",
"HarmonyOS 触摸类型": "`TouchType.Cancel`",
"映射说明": "事件取消"
},
{
"Android Action": "`ACTION_POINTER_DOWN`",
"HarmonyOS 触摸类型": "多点触摸开始",
"映射说明": "新手指按下"
},
{
"Android Action": "`ACTION_POINTER_UP`",
"HarmonyOS 触摸类型": "多点触摸结束",
"映射说明": "手指抬起"
},
{
"Android Action": "`ACTION_OUTSIDE`",
"HarmonyOS 触摸类型": "触摸区域外",
"映射说明": "触摸在组件外"
}
],
"raw_table": [
[
"Android Action",
"HarmonyOS 触摸类型",
"映射说明"
],
[
"`ACTION_DOWN`",
"`TouchType.Down`",
"手指按下"
],
[
"`ACTION_UP`",
"`TouchType.Up`",
"手指抬起"
],
[
"`ACTION_MOVE`",
"`TouchType.Move`",
"手指移动"
],
[
"`ACTION_CANCEL`",
"`TouchType.Cancel`",
"事件取消"
],
[
"`ACTION_POINTER_DOWN`",
"多点触摸开始",
"新手指按下"
],
[
"`ACTION_POINTER_UP`",
"多点触摸结束",
"手指抬起"
],
[
"`ACTION_OUTSIDE`",
"触摸区域外",
"触摸在组件外"
]
]
},
{
"table_index": 3,
"rows": [
{
"Android 属性": "`event.getX()` / `event.getY()`",
"HarmonyOS 属性": "`event.touches[0].x` / `event.touches[0].y`",
"映射说明": "获取坐标"
},
{
"Android 属性": "`event.getRawX()` / `event.getRawY()`",
"HarmonyOS 属性": "`event.touches[0].screenX` / `event.touches[0].screenY`",
"映射说明": "获取屏幕坐标"
},
{
"Android 属性": "`event.getPointerCount()`",
"HarmonyOS 属性": "`event.touches.length`",
"映射说明": "触摸点数量"
},
{
"Android 属性": "`event.getPointerId(index)`",
"HarmonyOS 属性": "`event.touches[index].id`",
"映射说明": "触摸点 ID"
},
{
"Android 属性": "`event.getPressure()`",
"HarmonyOS 属性": "`event.touches[0].pressure`",
"映射说明": "压力值"
},
{
"Android 属性": "`event.getSize()`",
"HarmonyOS 属性": "`event.touches[0].toolType`",
"映射说明": "触摸工具类型"
},
{
"Android 属性": "`event.getEventTime()`",
"HarmonyOS 属性": "`event.timestamp`",
"映射说明": "事件时间戳"
},
{
"Android 属性": "`event.getSource()`",
"HarmonyOS 属性": "无直接对应",
"映射说明": "输入源判断需自定义"
}
],
"raw_table": [
[
"Android 属性",
"HarmonyOS 属性",
"映射说明"
],
[
"`event.getX()` / `event.getY()`",
"`event.touches[0].x` / `event.touches[0].y`",
"获取坐标"
],
[
"`event.getRawX()` / `event.getRawY()`",
"`event.touches[0].screenX` / `event.touches[0].screenY`",
"获取屏幕坐标"
],
[
"`event.getPointerCount()`",
"`event.touches.length`",
"触摸点数量"
],
[
"`event.getPointerId(index)`",
"`event.touches[index].id`",
"触摸点 ID"
],
[
"`event.getPressure()`",
"`event.touches[0].pressure`",
"压力值"
],
[
"`event.getSize()`",
"`event.touches[0].toolType`",
"触摸工具类型"
],
[
"`event.getEventTime()`",
"`event.timestamp`",
"事件时间戳"
],
[
"`event.getSource()`",
"无直接对应",
"输入源判断需自定义"
]
]
},
{
"table_index": 4,
"rows": [
{
"Android 功能": "`setTouchDelegate()`",
"HarmonyOS 功能": "`responseRegion`",
"映射说明": "扩展响应热区",
"代码示例": "`Component().responseRegion({ x: '10%', y: '10%', width: '80%', height: '80%' })`"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`responseRegion`",
"映射说明": "热区可配置多个区域",
"代码示例": "支持设置一个或多个热区范围"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`responseRegion`",
"映射说明": "百分比偏移",
"代码示例": "x/y 可设置正负值百分比"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"`setTouchDelegate()`",
"`responseRegion`",
"扩展响应热区",
"`Component().responseRegion({ x: '10%', y: '10%', width: '80%', height: '80%' })`"
],
[
"无直接对应",
"`responseRegion`",
"热区可配置多个区域",
"支持设置一个或多个热区范围"
],
[
"无直接对应",
"`responseRegion`",
"百分比偏移",
"x/y 可设置正负值百分比"
]
]
},
{
"table_index": 5,
"rows": [
{
"Android 功能": "`requestDisallowInterceptTouchEvent()`",
"HarmonyOS 功能": "`hitTestBehavior`",
"映射说明": "阻止拦截(静态配置)",
"代码示例": "`Component().hitTestBehavior(HitTestMode.None)`"
},
{
"Android 功能": "`onInterceptTouchEvent()`",
"HarmonyOS 功能": "`onTouchIntercept()`",
"映射说明": "事件拦截(动态回调)",
"代码示例": "`Container().onTouchIntercept((event) => { /* 返回 HitTestMode */ })`"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.Default`",
"映射说明": "默认:自身命中会阻塞兄弟组件",
"代码示例": "API 7+"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.None`",
"映射说明": "自身不接收事件,不阻塞",
"代码示例": "API 7+"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.Block`",
"映射说明": "阻塞子组件的触摸测试",
"代码示例": "API 7+"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.Transparent`",
"映射说明": "自身触摸测试,不阻塞",
"代码示例": "API 7+"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.BLOCK_HIERARCHY`(API 20 新增)",
"映射说明": "自身和子节点响应,阻止祖先",
"代码示例": "API 20+"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`HitTestMode.BLOCK_DESCENDANTS`(API 20 新增)",
"映射说明": "自身不响应,后代也不响应",
"代码示例": "API 20+"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"`requestDisallowInterceptTouchEvent()`",
"`hitTestBehavior`",
"阻止拦截(静态配置)",
"`Component().hitTestBehavior(HitTestMode.None)`"
],
[
"`onInterceptTouchEvent()`",
"`onTouchIntercept()`",
"事件拦截(动态回调)",
"`Container().onTouchIntercept((event) => { /* 返回 HitTestMode */ })`"
],
[
"无直接对应",
"`HitTestMode.Default`",
"默认:自身命中会阻塞兄弟组件",
"API 7+"
],
[
"无直接对应",
"`HitTestMode.None`",
"自身不接收事件,不阻塞",
"API 7+"
],
[
"无直接对应",
"`HitTestMode.Block`",
"阻塞子组件的触摸测试",
"API 7+"
],
[
"无直接对应",
"`HitTestMode.Transparent`",
"自身触摸测试,不阻塞",
"API 7+"
],
[
"无直接对应",
"`HitTestMode.BLOCK_HIERARCHY`(API 20 新增)",
"自身和子节点响应,阻止祖先",
"API 20+"
],
[
"无直接对应",
"`HitTestMode.BLOCK_DESCENDANTS`(API 20 新增)",
"自身不响应,后代也不响应",
"API 20+"
]
]
},
{
"table_index": 6,
"rows": [
{
"Android 机制": "无直接 API",
"HarmonyOS 机制": "`stopPropagation()`",
"映射说明": "停止事件冒泡",
"代码示例对比": "HarmonyOS: `event.stopPropagation()`(API 21+)"
},
{
"Android 机制": "无直接 API",
"HarmonyOS 机制": "事件冒泡机制",
"映射说明": "默认冒泡到父组件",
"代码示例对比": "遵循右子树优先的后序遍历"
},
{
"Android 机制": "手势和事件独立",
"HarmonyOS 机制": "手势事件冒泡不影响基础事件",
"映射说明": "stopPropagation 只停止 Touch 事件,不影响手势",
"代码示例对比": "需要注意"
}
],
"raw_table": [
[
"Android 机制",
"HarmonyOS 机制",
"映射说明",
"代码示例对比"
],
[
"无直接 API",
"`stopPropagation()`",
"停止事件冒泡",
"HarmonyOS: `event.stopPropagation()`(API 21+)"
],
[
"无直接 API",
"事件冒泡机制",
"默认冒泡到父组件",
"遵循右子树优先的后序遍历"
],
[
"手势和事件独立",
"手势事件冒泡不影响基础事件",
"stopPropagation 只停止 Touch 事件,不影响手势",
"需要注意"
]
]
},
{
"table_index": 7,
"rows": [
{
"Android 事件": "`OnClickListener.onClick(View)`",
"HarmonyOS 事件": "`onClick(() => {})`",
"映射说明": "直接映射",
"代码示例对比": "Android: `button.setOnClickListener { }`<br/>HarmonyOS: `Button().onClick(() => {})`"
},
{
"Android 事件": "`OnLongClickListener.onLongClick(View)`",
"HarmonyOS 事件": "`onLongPress()` 手势",
"映射说明": "手势识别",
"代码示例对比": "Android: `button.setOnLongClickListener { }`<br/>HarmonyOS: `Button().gesture(LongPressGesture().onAction(() => {}))`"
},
{
"Android 事件": "`OnDoubleClickListener`",
"HarmonyOS 事件": "`TapGesture({count: 2})`",
"映射说明": "手势识别",
"代码示例对比": "Android: 自定义实现<br/>HarmonyOS: `Component().gesture(TapGesture({count: 2}).onAction(() => {}))`"
},
{
"Android 事件": "`OnContextClickListener`",
"HarmonyOS 事件": "`BindContextMenu`",
"映射说明": "上下文菜单",
"代码示例对比": "Android: `view.setOnContextClickListener { }`<br/>HarmonyOS: `Component().bindContextMenu(this.menuBuilder)`"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 事件",
"映射说明",
"代码示例对比"
],
[
"`OnClickListener.onClick(View)`",
"`onClick(() => {})`",
"直接映射",
"Android: `button.setOnClickListener { }`<br/>HarmonyOS: `Button().onClick(() => {})`"
],
[
"`OnLongClickListener.onLongClick(View)`",
"`onLongPress()` 手势",
"手势识别",
"Android: `button.setOnLongClickListener { }`<br/>HarmonyOS: `Button().gesture(LongPressGesture().onAction(() => {}))`"
],
[
"`OnDoubleClickListener`",
"`TapGesture({count: 2})`",
"手势识别",
"Android: 自定义实现<br/>HarmonyOS: `Component().gesture(TapGesture({count: 2}).onAction(() => {}))`"
],
[
"`OnContextClickListener`",
"`BindContextMenu`",
"上下文菜单",
"Android: `view.setOnContextClickListener { }`<br/>HarmonyOS: `Component().bindContextMenu(this.menuBuilder)`"
]
]
},
{
"table_index": 8,
"rows": [
{
"Android 手势": "`GestureDetector.OnSingleTapUpListener`",
"HarmonyOS 手势": "`TapGesture({count: 1})`",
"映射说明": "单击",
"参数映射": "count: 1"
},
{
"Android 手势": "`GestureDetector.OnDoubleTapListener`",
"HarmonyOS 手势": "`TapGesture({count: 2})`",
"映射说明": "双击",
"参数映射": "count: 2"
},
{
"Android 手势": "`GestureDetector.OnShowPressListener`",
"HarmonyOS 手势": "`TapGesture` + 延时",
"映射说明": "长按触发",
"参数映射": "需自定义延时"
},
{
"Android 手势": "手指按下",
"HarmonyOS 手势": "`TapGesture` onAction",
"映射说明": "动作回调",
"参数映射": "`onAction(() => {})`"
}
],
"raw_table": [
[
"Android 手势",
"HarmonyOS 手势",
"映射说明",
"参数映射"
],
[
"`GestureDetector.OnSingleTapUpListener`",
"`TapGesture({count: 1})`",
"单击",
"count: 1"
],
[
"`GestureDetector.OnDoubleTapListener`",
"`TapGesture({count: 2})`",
"双击",
"count: 2"
],
[
"`GestureDetector.OnShowPressListener`",
"`TapGesture` + 延时",
"长按触发",
"需自定义延时"
],
[
"手指按下",
"`TapGesture` onAction",
"动作回调",
"`onAction(() => {})`"
]
]
},
{
"table_index": 9,
"rows": [
{
"Android 手势": "`GestureDetector.OnLongPressListener`",
"HarmonyOS 手势": "`LongPressGesture`",
"映射说明": "长按",
"代码示例": "`Component().gesture(LongPressGesture().onAction(() => {}))`"
},
{
"Android 手势": "`onLongPress(MotionEvent)`",
"HarmonyOS 手势": "`LongPressGesture` onAction",
"映射说明": "长按动作",
"代码示例": "`onAction(() => { /* 长按触发 */ })`"
}
],
"raw_table": [
[
"Android 手势",
"HarmonyOS 手势",
"映射说明",
"代码示例"
],
[
"`GestureDetector.OnLongPressListener`",
"`LongPressGesture`",
"长按",
"`Component().gesture(LongPressGesture().onAction(() => {}))`"
],
[
"`onLongPress(MotionEvent)`",
"`LongPressGesture` onAction",
"长按动作",
"`onAction(() => { /* 长按触发 */ })`"
]
]
},
{
"table_index": 10,
"rows": [
{
"Android 手势": "`GestureDetector.OnScrollListener`",
"HarmonyOS 手势": "`PanGesture`",
"映射说明": "滑动/拖动",
"参数映射": "direction: PanDirection"
},
{
"Android 手势": "`onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)`",
"HarmonyOS 手势": "`PanGesture` onAction",
"映射说明": "滑动动作",
"参数映射": "`onAction((event: GestureEvent) => { /* 处理滑动 */ })`"
},
{
"Android 手势": "`onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)`",
"HarmonyOS 手势": "`SwipeGesture`",
"映射说明": "快速滑动",
"参数映射": "需要速度阈值判断"
}
],
"raw_table": [
[
"Android 手势",
"HarmonyOS 手势",
"映射说明",
"参数映射"
],
[
"`GestureDetector.OnScrollListener`",
"`PanGesture`",
"滑动/拖动",
"direction: PanDirection"
],
[
"`onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)`",
"`PanGesture` onAction",
"滑动动作",
"`onAction((event: GestureEvent) => { /* 处理滑动 */ })`"
],
[
"`onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)`",
"`SwipeGesture`",
"快速滑动",
"需要速度阈值判断"
]
]
},
{
"table_index": 11,
"rows": [
{
"Android 手势": "`ScaleGestureDetector.OnScaleGestureListener`",
"HarmonyOS 手势": "`PinchGesture`",
"映射说明": "双指缩放",
"参数映射": "需配合手势系统"
},
{
"Android 手势": "`onScale(ScaleGestureDetector detector)`",
"HarmonyOS 手势": "`PinchGesture` onAction",
"映射说明": "缩放动作",
"参数映射": "`onAction((event: GestureEvent) => { /* 处理缩放 */ })`"
},
{
"Android 手势": "`onScaleBegin(ScaleGestureDetector detector)`",
"HarmonyOS 手势": "`PinchGesture` onActionStart",
"映射说明": "缩放开始",
"参数映射": "`onActionStart(() => {})`"
},
{
"Android 手势": "`onScaleEnd(ScaleGestureDetector detector)`",
"HarmonyOS 手势": "`PinchGesture` onActionEnd",
"映射说明": "缩放结束",
"参数映射": "`onActionEnd(() => {})`"
}
],
"raw_table": [
[
"Android 手势",
"HarmonyOS 手势",
"映射说明",
"参数映射"
],
[
"`ScaleGestureDetector.OnScaleGestureListener`",
"`PinchGesture`",
"双指缩放",
"需配合手势系统"
],
[
"`onScale(ScaleGestureDetector detector)`",
"`PinchGesture` onAction",
"缩放动作",
"`onAction((event: GestureEvent) => { /* 处理缩放 */ })`"
],
[
"`onScaleBegin(ScaleGestureDetector detector)`",
"`PinchGesture` onActionStart",
"缩放开始",
"`onActionStart(() => {})`"
],
[
"`onScaleEnd(ScaleGestureDetector detector)`",
"`PinchGesture` onActionEnd",
"缩放结束",
"`onActionEnd(() => {})`"
]
]
},
{
"table_index": 12,
"rows": [
{
"Android 手势": "无直接对应(需自定义)",
"HarmonyOS 手势": "`RotationGesture`",
"映射说明": "双指旋转",
"代码示例": "`Component().gesture(RotationGesture().onAction(() => {}))`"
}
],
"raw_table": [
[
"Android 手势",
"HarmonyOS 手势",
"映射说明",
"代码示例"
],
[
"无直接对应(需自定义)",
"`RotationGesture`",
"双指旋转",
"`Component().gesture(RotationGesture().onAction(() => {}))`"
]
]
},
{
"table_index": 13,
"rows": [
{
"Android 机制": "GestureDetector 组合",
"HarmonyOS 机制": "`GestureGroup`",
"映射说明": "手势组合识别"
},
{
"Android 机制": "手势冲突处理",
"HarmonyOS 机制": "`GestureMask`",
"映射说明": "手势响应模式控制"
},
{
"Android 机制": "事件拦截 onInterceptTouchEvent",
"HarmonyOS 机制": "`onTouchIntercept`",
"映射说明": "触摸事件拦截"
}
],
"raw_table": [
[
"Android 机制",
"HarmonyOS 机制",
"映射说明"
],
[
"GestureDetector 组合",
"`GestureGroup`",
"手势组合识别"
],
[
"手势冲突处理",
"`GestureMask`",
"手势响应模式控制"
],
[
"事件拦截 onInterceptTouchEvent",
"`onTouchIntercept`",
"触摸事件拦截"
]
]
},
{
"table_index": 14,
"rows": [
{
"Android 事件": "`OnPageChangeListener`",
"HarmonyOS 手势": "`SwiperController` + onChange",
"映射说明": "页面滑动",
"代码示例": "`Swiper().onChange((index) => {})`"
},
{
"Android 事件": "`OnScrollChangeListener`",
"HarmonyOS 手势": "`Scroll` onScroll",
"映射说明": "滚动监听",
"代码示例": "`Scroll().onScroll((xOffset, yOffset) => {})`"
},
{
"Android 事件": "`RecyclerView.OnScrollListener`",
"HarmonyOS 手势": "`List` onScroll",
"映射说明": "列表滚动",
"代码示例": "`List().onScroll((scrollOffset, scrollState) => {})`"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 手势",
"映射说明",
"代码示例"
],
[
"`OnPageChangeListener`",
"`SwiperController` + onChange",
"页面滑动",
"`Swiper().onChange((index) => {})`"
],
[
"`OnScrollChangeListener`",
"`Scroll` onScroll",
"滚动监听",
"`Scroll().onScroll((xOffset, yOffset) => {})`"
],
[
"`RecyclerView.OnScrollListener`",
"`List` onScroll",
"列表滚动",
"`List().onScroll((scrollOffset, scrollState) => {})`"
]
]
},
{
"table_index": 15,
"rows": [
{
"Android 功能": "View.OnDragListener",
"HarmonyOS 功能": "`Drag` 装饰器",
"映射说明": "拖拽功能",
"代码示例": "`Component().gesture(Drag())`"
},
{
"Android 功能": "`onDrag(View v, DragEvent event)`",
"HarmonyOS 功能": "`Drag` onActionStart/onAction/onActionEnd",
"映射说明": "拖拽事件",
"代码示例": "`onActionStart(() => {})`<br/>`onAction((event) => {})`<br/>`onActionEnd(() => {})`"
},
{
"Android 功能": "`startDragAndDrop()`",
"HarmonyOS 功能": "无直接对应",
"映射说明": "系统拖拽",
"代码示例": "需自定义实现"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"View.OnDragListener",
"`Drag` 装饰器",
"拖拽功能",
"`Component().gesture(Drag())`"
],
[
"`onDrag(View v, DragEvent event)`",
"`Drag` onActionStart/onAction/onActionEnd",
"拖拽事件",
"`onActionStart(() => {})`<br/>`onAction((event) => {})`<br/>`onActionEnd(() => {})`"
],
[
"`startDragAndDrop()`",
"无直接对应",
"系统拖拽",
"需自定义实现"
]
]
},
{
"table_index": 16,
"rows": [
{
"Android 功能": "ItemTouchHelper Swipe",
"HarmonyOS 功能": "`SwipeGesture` + 状态",
"映射说明": "滑动删除",
"代码示例": "`ListItem().gesture(SwipeGesture().onAction(() => { /* 删除逻辑 */ }))`"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"ItemTouchHelper Swipe",
"`SwipeGesture` + 状态",
"滑动删除",
"`ListItem().gesture(SwipeGesture().onAction(() => { /* 删除逻辑 */ }))`"
]
]
},
{
"table_index": 17,
"rows": [
{
"Android 事件": "`OnFocusChangeListener.onFocusChange(View v, boolean hasFocus)`",
"HarmonyOS 事件": "`onFocus()` / `onBlur()`",
"映射说明": "分离为两个事件",
"代码示例对比": "Android: `view.onFocusChange { _, hasFocus -> }`<br/>HarmonyOS: `Component().onFocus(() => {}).onBlur(() => {})`"
},
{
"Android 事件": "`setOnFocusChangeListener()`",
"HarmonyOS 事件": "`onFocus()` / `onBlur()`",
"映射说明": "焦点变化监听",
"代码示例对比": "`Component().onFocus(() => { /* 获得焦点 */ }).onBlur(() => { /* 失去焦点 */ })`"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 事件",
"映射说明",
"代码示例对比"
],
[
"`OnFocusChangeListener.onFocusChange(View v, boolean hasFocus)`",
"`onFocus()` / `onBlur()`",
"分离为两个事件",
"Android: `view.onFocusChange { _, hasFocus -> }`<br/>HarmonyOS: `Component().onFocus(() => {}).onBlur(() => {})`"
],
[
"`setOnFocusChangeListener()`",
"`onFocus()` / `onBlur()`",
"焦点变化监听",
"`Component().onFocus(() => { /* 获得焦点 */ }).onBlur(() => { /* 失去焦点 */ })`"
]
]
},
{
"table_index": 18,
"rows": [
{
"Android 功能": "`requestFocus()`",
"HarmonyOS 功能": "`focusControl.requestFocus()`",
"映射说明": "请求焦点",
"代码示例对比": "Android: `editText.requestFocus()`<br/>HarmonyOS: `focusControl.requestFocus(this.input)`"
},
{
"Android 功能": "`clearFocus()`",
"HarmonyOS 功能": "`focusControl.requestFocus(null)`",
"映射说明": "清除焦点",
"代码示例对比": "Android: `editText.clearFocus()`<br/>HarmonyOS: `focusControl.requestFocus(null)`"
},
{
"Android 功能": "`isFocused()`",
"HarmonyOS 功能": "组件属性 `focused`",
"映射说明": "检查焦点状态",
"代码示例对比": "Android: `view.isFocused()`<br/>HarmonyOS: 组件内部状态判断"
},
{
"Android 功能": "`findFocus()`",
"HarmonyOS 功能": "`focusControl.requestFocus()`",
"映射说明": "查找焦点组件",
"代码示例对比": "功能相似,API不同"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例对比"
],
[
"`requestFocus()`",
"`focusControl.requestFocus()`",
"请求焦点",
"Android: `editText.requestFocus()`<br/>HarmonyOS: `focusControl.requestFocus(this.input)`"
],
[
"`clearFocus()`",
"`focusControl.requestFocus(null)`",
"清除焦点",
"Android: `editText.clearFocus()`<br/>HarmonyOS: `focusControl.requestFocus(null)`"
],
[
"`isFocused()`",
"组件属性 `focused`",
"检查焦点状态",
"Android: `view.isFocused()`<br/>HarmonyOS: 组件内部状态判断"
],
[
"`findFocus()`",
"`focusControl.requestFocus()`",
"查找焦点组件",
"功能相似,API不同"
]
]
},
{
"table_index": 19,
"rows": [
{
"Android 功能": "`FOCUS_DOWN` / `FOCUS_UP` / `FOCUS_LEFT` / `FOCUS_RIGHT`",
"HarmonyOS 功能": "键盘方向键",
"映射说明": "方向键移动焦点"
},
{
"Android 功能": "`nextFocusDown` 等 XML 属性",
"HarmonyOS 功能": "`focusable` 属性",
"映射说明": "焦点可获取性"
},
{
"Android 功能": "`FocusFinder.findNextFocus()`",
"HarmonyOS 功能": "系统自动处理",
"映射说明": "下一个焦点查找"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明"
],
[
"`FOCUS_DOWN` / `FOCUS_UP` / `FOCUS_LEFT` / `FOCUS_RIGHT`",
"键盘方向键",
"方向键移动焦点"
],
[
"`nextFocusDown` 等 XML 属性",
"`focusable` 属性",
"焦点可获取性"
],
[
"`FocusFinder.findNextFocus()`",
"系统自动处理",
"下一个焦点查找"
]
]
},
{
"table_index": 20,
"rows": [
{
"Android 特性": "触摸自动获取焦点",
"HarmonyOS 特性": "默认不自动",
"映射说明": "HarmonyOS 需设置 `focusOnTouch` 属性"
},
{
"Android 特性": "Tab 键切换焦点",
"HarmonyOS 特性": "Tab 键切换焦点",
"映射说明": "默认行为一致"
},
{
"Android 特性": "方向键移动焦点",
"HarmonyOS 特性": "方向键移动焦点",
"映射说明": "默认行为一致"
}
],
"raw_table": [
[
"Android 特性",
"HarmonyOS 特性",
"映射说明"
],
[
"触摸自动获取焦点",
"默认不自动",
"HarmonyOS 需设置 `focusOnTouch` 属性"
],
[
"Tab 键切换焦点",
"Tab 键切换焦点",
"默认行为一致"
],
[
"方向键移动焦点",
"方向键移动焦点",
"默认行为一致"
]
]
},
{
"table_index": 21,
"rows": [
{
"Android 事件": "`OnKeyListener.onKey(View v, int keyCode, KeyEvent event)`",
"HarmonyOS 事件": "`onKeyEvent(event: KeyEvent)`",
"映射说明": "键盘事件",
"代码示例对比": "Android: `view.setOnKeyListener { _, keyCode, _ -> }`<br/>HarmonyOS: `Component().onKeyEvent((event) => { /* 处理按键 */ })`"
},
{
"Android 事件": "`dispatchKeyEvent(KeyEvent event)`",
"HarmonyOS 事件": "`onKeyEvent()`",
"映射说明": "按键分发",
"代码示例对比": "功能类似"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 事件",
"映射说明",
"代码示例对比"
],
[
"`OnKeyListener.onKey(View v, int keyCode, KeyEvent event)`",
"`onKeyEvent(event: KeyEvent)`",
"键盘事件",
"Android: `view.setOnKeyListener { _, keyCode, _ -> }`<br/>HarmonyOS: `Component().onKeyEvent((event) => { /* 处理按键 */ })`"
],
[
"`dispatchKeyEvent(KeyEvent event)`",
"`onKeyEvent()`",
"按键分发",
"功能类似"
]
]
},
{
"table_index": 22,
"rows": [
{
"Android 键值": "`KeyEvent.KEYCODE_ENTER`",
"HarmonyOS 键值": "`KeyCode.ENTER`",
"映射说明": "回车键"
},
{
"Android 键值": "`KeyEvent.KEYCODE_BACK`",
"HarmonyOS 键值": "`KeyCode.ESCAPE`",
"映射说明": "返回键"
},
{
"Android 键值": "`KeyEvent.KEYCODE_DEL`",
"HarmonyOS 键值": "`KeyCode.DELETE`",
"映射说明": "删除键"
},
{
"Android 键值": "`KeyEvent.KEYCODE_TAB`",
"HarmonyOS 键值": "`KeyCode.TAB`",
"映射说明": "Tab 键"
},
{
"Android 键值": "`KeyEvent.KEYCODE_DPAD_UP/DOWN/LEFT/RIGHT`",
"HarmonyOS 键值": "方向键",
"映射说明": "方向键"
}
],
"raw_table": [
[
"Android 键值",
"HarmonyOS 键值",
"映射说明"
],
[
"`KeyEvent.KEYCODE_ENTER`",
"`KeyCode.ENTER`",
"回车键"
],
[
"`KeyEvent.KEYCODE_BACK`",
"`KeyCode.ESCAPE`",
"返回键"
],
[
"`KeyEvent.KEYCODE_DEL`",
"`KeyCode.DELETE`",
"删除键"
],
[
"`KeyEvent.KEYCODE_TAB`",
"`KeyCode.TAB`",
"Tab 键"
],
[
"`KeyEvent.KEYCODE_DPAD_UP/DOWN/LEFT/RIGHT`",
"方向键",
"方向键"
]
]
},
{
"table_index": 23,
"rows": [
{
"Android 功能": "`InputMethodManager`",
"HarmonyOS 功能": "`InputMethod`",
"映射说明": "输入法管理"
},
{
"Android 功能": "`showSoftInput()` / `hideSoftInput()`",
"HarmonyOS 功能": "`focusControl.requestFocus()`",
"映射说明": "显示/隐藏键盘"
},
{
"Android 功能": "`IME_ACTION` 配置",
"HarmonyOS 功能": "`enterKeyType` 属性",
"映射说明": "输入法操作类型"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明"
],
[
"`InputMethodManager`",
"`InputMethod`",
"输入法管理"
],
[
"`showSoftInput()` / `hideSoftInput()`",
"`focusControl.requestFocus()`",
"显示/隐藏键盘"
],
[
"`IME_ACTION` 配置",
"`enterKeyType` 属性",
"输入法操作类型"
]
]
},
{
"table_index": 24,
"rows": [
{
"Android 机制": "`dispatchTouchEvent()`",
"HarmonyOS 机制": "自动分发系统",
"映射说明": "Android 手动分发",
"架构差异": "HarmonyOS 自动处理"
},
{
"Android 机制": "`onInterceptTouchEvent()`",
"HarmonyOS 机制": "`onTouchIntercept()`",
"映射说明": "事件拦截",
"架构差异": "功能类似,API不同"
},
{
"Android 机制": "事件响应链机制",
"HarmonyOS 机制": "事件响应链机制",
"映射说明": "事件传播",
"架构差异": "HarmonyOS 基于触摸测试构建响应链(API 20/21)"
}
],
"raw_table": [
[
"Android 机制",
"HarmonyOS 机制",
"映射说明",
"架构差异"
],
[
"`dispatchTouchEvent()`",
"自动分发系统",
"Android 手动分发",
"HarmonyOS 自动处理"
],
[
"`onInterceptTouchEvent()`",
"`onTouchIntercept()`",
"事件拦截",
"功能类似,API不同"
],
[
"事件响应链机制",
"事件响应链机制",
"事件传播",
"HarmonyOS 基于触摸测试构建响应链(API 20/21)"
]
]
},
{
"table_index": 25,
"rows": [
{
"Android 机制": "`requestDisallowInterceptTouchEvent(true)`",
"HarmonyOS 机制": "`onTouchIntercept` 返回 false",
"映射说明": "阻止拦截",
"代码示例对比": "Android: `parent.requestDisallowInterceptTouchEvent(true)`<br/>HarmonyOS: `Container().onTouchIntercept(() => false)`"
},
{
"Android 机制": "`stopPropagation()`",
"HarmonyOS 机制": "`event.stopPropagation()`",
"映射说明": "停止事件冒泡",
"代码示例对比": "HarmonyOS: `event.stopPropagation()`(API 21+)"
},
{
"Android 机制": "`return true` / `return false`",
"HarmonyOS 机制": "事件消费",
"映射说明": "事件消费控制",
"代码示例对比": "Android: `return true` 消费事件<br/>HarmonyOS: 绑定事件即消费"
}
],
"raw_table": [
[
"Android 机制",
"HarmonyOS 机制",
"映射说明",
"代码示例对比"
],
[
"`requestDisallowInterceptTouchEvent(true)`",
"`onTouchIntercept` 返回 false",
"阻止拦截",
"Android: `parent.requestDisallowInterceptTouchEvent(true)`<br/>HarmonyOS: `Container().onTouchIntercept(() => false)`"
],
[
"`stopPropagation()`",
"`event.stopPropagation()`",
"停止事件冒泡",
"HarmonyOS: `event.stopPropagation()`(API 21+)"
],
[
"`return true` / `return false`",
"事件消费",
"事件消费控制",
"Android: `return true` 消费事件<br/>HarmonyOS: 绑定事件即消费"
]
]
},
{
"table_index": 26,
"rows": [
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`onGestureRecognizerJudgeBegin()`",
"映射说明": "手势判断拦截",
"代码示例": "`Component().onGestureRecognizerJudgeBegin(() => { /* 拦截手势判断 */ })`"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`parallelGesture()`",
"映射说明": "并行手势绑定",
"代码示例": "支持系统手势和自定义手势并行处理"
},
{
"Android 功能": "无直接对应",
"HarmonyOS 功能": "`手势拦截`",
"映射说明": "动态控制手势触发",
"代码示例": "从 API 20 开始支持手势拦截能力"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"无直接对应",
"`onGestureRecognizerJudgeBegin()`",
"手势判断拦截",
"`Component().onGestureRecognizerJudgeBegin(() => { /* 拦截手势判断 */ })`"
],
[
"无直接对应",
"`parallelGesture()`",
"并行手势绑定",
"支持系统手势和自定义手势并行处理"
],
[
"无直接对应",
"`手势拦截`",
"动态控制手势触发",
"从 API 20 开始支持手势拦截能力"
]
]
},
{
"table_index": 27,
"rows": [
{
"概念": "触摸测试",
"Android": "手动实现",
"HarmonyOS": "自动基于坐标测试",
"说明": "API 20/21 自动进行"
},
{
"概念": "响应链收集",
"Android": "递归遍历",
"HarmonyOS": "右子树优先后序遍历",
"说明": "更高效的事件分发"
},
{
"概念": "事件分发",
"Android": "dispatchTouchEvent",
"HarmonyOS": "自动分发系统",
"说明": "减少开发复杂度"
}
],
"raw_table": [
[
"概念",
"Android",
"HarmonyOS",
"说明"
],
[
"触摸测试",
"手动实现",
"自动基于坐标测试",
"API 20/21 自动进行"
],
[
"响应链收集",
"递归遍历",
"右子树优先后序遍历",
"更高效的事件分发"
],
[
"事件分发",
"dispatchTouchEvent",
"自动分发系统",
"减少开发复杂度"
]
]
},
{
"table_index": 28,
"rows": [
{
"Android 问题": "父子组件触摸事件冲突",
"HarmonyOS 解决方案": "`onTouch` + `onClick` 冲突解决",
"映射说明": "多层级事件处理",
"参考文档": "[多层级手势事件官方文档](https://developer.huawei.com/consumer/cn/doc/HarmonyOS-Guides/arkts-gesture-events-multi-level-gesture)"
},
{
"Android 问题": "Button onClick 父组件 onTouch 冲突",
"HarmonyOS 解决方案": "`stopPropagation()` 或配置",
"映射说明": "事件优先级处理",
"参考文档": "[onTouch与onClick事件冲突 FAQ](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-174)"
}
],
"raw_table": [
[
"Android 问题",
"HarmonyOS 解决方案",
"映射说明",
"参考文档"
],
[
"父子组件触摸事件冲突",
"`onTouch` + `onClick` 冲突解决",
"多层级事件处理",
"[多层级手势事件官方文档](https://developer.huawei.com/consumer/cn/doc/HarmonyOS-Guides/arkts-gesture-events-multi-level-gesture)"
],
[
"Button onClick 父组件 onTouch 冲突",
"`stopPropagation()` 或配置",
"事件优先级处理",
"[onTouch与onClick事件冲突 FAQ](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-174)"
]
]
},
{
"table_index": 29,
"rows": [
{
"Android 生命周期": "`View.onAttachedToWindow()`",
"HarmonyOS 生命周期": "`aboutToAppear()`",
"映射说明": "组件即将出现",
"调用时机": "组件挂载到 DOM 时"
},
{
"Android 生命周期": "`View.onDetachedFromWindow()`",
"HarmonyOS 生命周期": "`aboutToDisappear()`",
"映射说明": "组件即将消失",
"调用时机": "组件从 DOM 卸载时"
},
{
"Android 生命周期": "`View.onVisibilityChanged()`",
"HarmonyOS 生命周期": "`visibility` 属性变化",
"映射说明": "可见性变化",
"调用时机": "组件显示/隐藏时"
}
],
"raw_table": [
[
"Android 生命周期",
"HarmonyOS 生命周期",
"映射说明",
"调用时机"
],
[
"`View.onAttachedToWindow()`",
"`aboutToAppear()`",
"组件即将出现",
"组件挂载到 DOM 时"
],
[
"`View.onDetachedFromWindow()`",
"`aboutToDisappear()`",
"组件即将消失",
"组件从 DOM 卸载时"
],
[
"`View.onVisibilityChanged()`",
"`visibility` 属性变化",
"可见性变化",
"组件显示/隐藏时"
]
]
},
{
"table_index": 30,
"rows": [
{
"Android 生命周期": "`Activity.onCreate()`",
"HarmonyOS 生命周期": "`UIAbility.onCreate()`",
"映射说明": "创建",
"调用时机": "页面创建时"
},
{
"Android 生命周期": "`Activity.onStart()`",
"HarmonyOS 生命周期": "`UIAbility.onForeground()`",
"映射说明": "前台",
"调用时机": "页面进入前台时"
},
{
"Android 生命周期": "`Activity.onResume()`",
"HarmonyOS 生命周期": "`UIAbility.onForeground()` 内部处理",
"映射说明": "可交互",
"调用时机": "页面可交互时"
},
{
"Android 生命周期": "`Activity.onPause()`",
"HarmonyOS 生命周期": "`UIAbility.onBackground()`",
"映射说明": "后台",
"调用时机": "页面进入后台时"
},
{
"Android 生命周期": "`Activity.onStop()`",
"HarmonyOS 生命周期": "`UIAbility.onBackground()`",
"映射说明": "停止",
"调用时机": "页面停止时"
},
{
"Android 生命周期": "`Activity.onDestroy()`",
"HarmonyOS 生命周期": "`UIAbility.onDestroy()`",
"映射说明": "销毁",
"调用时机": "页面销毁时"
}
],
"raw_table": [
[
"Android 生命周期",
"HarmonyOS 生命周期",
"映射说明",
"调用时机"
],
[
"`Activity.onCreate()`",
"`UIAbility.onCreate()`",
"创建",
"页面创建时"
],
[
"`Activity.onStart()`",
"`UIAbility.onForeground()`",
"前台",
"页面进入前台时"
],
[
"`Activity.onResume()`",
"`UIAbility.onForeground()` 内部处理",
"可交互",
"页面可交互时"
],
[
"`Activity.onPause()`",
"`UIAbility.onBackground()`",
"后台",
"页面进入后台时"
],
[
"`Activity.onStop()`",
"`UIAbility.onBackground()`",
"停止",
"页面停止时"
],
[
"`Activity.onDestroy()`",
"`UIAbility.onDestroy()`",
"销毁",
"页面销毁时"
]
]
},
{
"table_index": 31,
"rows": [
{
"Android 事件": "`onWindowFocusChanged(boolean hasFocus)`",
"HarmonyOS 事件": "`onPageShow()` / `onPageHide()`",
"映射说明": "窗口焦点变化",
"代码示例": "`@Entry struct Page { onPageShow() { /* 页面显示 */ } onPageHide() { /* 页面隐藏 */ } }`"
},
{
"Android 事件": "`onConfigurationChanged(Configuration newConfig)`",
"HarmonyOS 事件": "`onConfigurationUpdated(newConfig)`",
"映射说明": "配置变化",
"代码示例": "配置(如屏幕方向)变化时调用"
}
],
"raw_table": [
[
"Android 事件",
"HarmonyOS 事件",
"映射说明",
"代码示例"
],
[
"`onWindowFocusChanged(boolean hasFocus)`",
"`onPageShow()` / `onPageHide()`",
"窗口焦点变化",
"`@Entry struct Page { onPageShow() { /* 页面显示 */ } onPageHide() { /* 页面隐藏 */ } }`"
],
[
"`onConfigurationChanged(Configuration newConfig)`",
"`onConfigurationUpdated(newConfig)`",
"配置变化",
"配置(如屏幕方向)变化时调用"
]
]
},
{
"table_index": 32,
"rows": [
{
"Android 动画": "`ObjectAnimator.ofFloat(view, \"translationX\", 0, 100)`",
"HarmonyOS 动画": "`animateTo({ duration: 1000 }, () => { this.x = 100 })`",
"映射说明": "属性动画",
"代码示例对比": "Android: `ObjectAnimator.ofFloat(view, \"translationX\", 0, 100).start()`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.x = 100 })`"
},
{
"Android 动画": "`ValueAnimator.ofFloat(0, 100)`",
"HarmonyOS 动画": "`animateTo()`",
"映射说明": "值动画",
"代码示例对比": "Android: `ValueAnimator.ofFloat(0, 100)`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.value = 100 })`"
},
{
"Android 动画": "`AnimatorSet`",
"HarmonyOS 动画": "组合 `animateTo` 调用",
"映射说明": "动画集合",
"代码示例对比": "Android: `AnimatorSet.playTogether(animator1, animator2)`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.x = 100; this.y = 200; })`"
}
],
"raw_table": [
[
"Android 动画",
"HarmonyOS 动画",
"映射说明",
"代码示例对比"
],
[
"`ObjectAnimator.ofFloat(view, \"translationX\", 0, 100)`",
"`animateTo({ duration: 1000 }, () => { this.x = 100 })`",
"属性动画",
"Android: `ObjectAnimator.ofFloat(view, \"translationX\", 0, 100).start()`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.x = 100 })`"
],
[
"`ValueAnimator.ofFloat(0, 100)`",
"`animateTo()`",
"值动画",
"Android: `ValueAnimator.ofFloat(0, 100)`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.value = 100 })`"
],
[
"`AnimatorSet`",
"组合 `animateTo` 调用",
"动画集合",
"Android: `AnimatorSet.playTogether(animator1, animator2)`<br/>HarmonyOS: `animateTo({ duration: 1000 }, () => { this.x = 100; this.y = 200; })`"
]
]
},
{
"table_index": 33,
"rows": [
{
"Android 动画": "`TranslateAnimation`",
"HarmonyOS 动画": "`animateTo` + `translate`",
"映射说明": "平移动画",
"代码示例对比": "Android: `TranslateAnimation(0, 100, 0, 0)`<br/>HarmonyOS: `Component().translate({ x: this.x }).animation({ duration: 1000 })`"
},
{
"Android 动画": "`ScaleAnimation`",
"HarmonyOS 动画": "`animateTo` + `scale`",
"映射说明": "缩放动画",
"代码示例对比": "Android: `ScaleAnimation(1, 1.5f, 1, 1.5f)`<br/>HarmonyOS: `Component().scale({ x: this.scale }).animation({ duration: 1000 })`"
},
{
"Android 动画": "`RotateAnimation`",
"HarmonyOS 动画": "`animateTo` + `rotate`",
"映射说明": "旋转动画",
"代码示例对比": "Android: `RotateAnimation(0, 360)`<br/>HarmonyOS: `Component().rotate({ angle: this.angle }).animation({ duration: 1000 })`"
},
{
"Android 动画": "`AlphaAnimation`",
"HarmonyOS 动画": "`animateTo` + `opacity`",
"映射说明": "透明度动画",
"代码示例对比": "Android: `AlphaAnimation(1, 0)`<br/>HarmonyOS: `Component().opacity(this.opacity).animation({ duration: 1000 })`"
}
],
"raw_table": [
[
"Android 动画",
"HarmonyOS 动画",
"映射说明",
"代码示例对比"
],
[
"`TranslateAnimation`",
"`animateTo` + `translate`",
"平移动画",
"Android: `TranslateAnimation(0, 100, 0, 0)`<br/>HarmonyOS: `Component().translate({ x: this.x }).animation({ duration: 1000 })`"
],
[
"`ScaleAnimation`",
"`animateTo` + `scale`",
"缩放动画",
"Android: `ScaleAnimation(1, 1.5f, 1, 1.5f)`<br/>HarmonyOS: `Component().scale({ x: this.scale }).animation({ duration: 1000 })`"
],
[
"`RotateAnimation`",
"`animateTo` + `rotate`",
"旋转动画",
"Android: `RotateAnimation(0, 360)`<br/>HarmonyOS: `Component().rotate({ angle: this.angle }).animation({ duration: 1000 })`"
],
[
"`AlphaAnimation`",
"`animateTo` + `opacity`",
"透明度动画",
"Android: `AlphaAnimation(1, 0)`<br/>HarmonyOS: `Component().opacity(this.opacity).animation({ duration: 1000 })`"
]
]
},
{
"table_index": 34,
"rows": [
{
"Android 转场": "`ActivityOptions.makeCustomAnimation()`",
"HarmonyOS 转场": "`pageTransition()`",
"映射说明": "页面转场",
"代码示例对比": "Android: `startActivity(intent, options.toBundle())`<br/>HarmonyOS: `@Entry @Component struct Page { pageTransition() { PageTransitionEnter({ type: RouteType.None, duration: 1000 }).slide({ type: SlideEffect.Right }) } }`"
},
{
"Android 转场": "`SharedElementCallback`",
"HarmonyOS 转场": "`sharedTransition()`",
"映射说明": "共享元素转场",
"代码示例对比": "Android: `ActivityOptions.makeSceneTransitionAnimation()`<br/>HarmonyOS: `Component().sharedTransition('id', { duration: 1000 })`"
},
{
"Android 转场": "`Transition`",
"HarmonyOS 转场": "`transition`",
"映射说明": "组件转场",
"代码示例对比": "Android: `TransitionSet`<br/>HarmonyOS: `if (this.show) { Component().transition({ type: TransitionType.All, opacity: 0 }) }`"
}
],
"raw_table": [
[
"Android 转场",
"HarmonyOS 转场",
"映射说明",
"代码示例对比"
],
[
"`ActivityOptions.makeCustomAnimation()`",
"`pageTransition()`",
"页面转场",
"Android: `startActivity(intent, options.toBundle())`<br/>HarmonyOS: `@Entry @Component struct Page { pageTransition() { PageTransitionEnter({ type: RouteType.None, duration: 1000 }).slide({ type: SlideEffect.Right }) } }`"
],
[
"`SharedElementCallback`",
"`sharedTransition()`",
"共享元素转场",
"Android: `ActivityOptions.makeSceneTransitionAnimation()`<br/>HarmonyOS: `Component().sharedTransition('id', { duration: 1000 })`"
],
[
"`Transition`",
"`transition`",
"组件转场",
"Android: `TransitionSet`<br/>HarmonyOS: `if (this.show) { Component().transition({ type: TransitionType.All, opacity: 0 }) }`"
]
]
},
{
"table_index": 35,
"rows": [
{
"Android 监听器": "`Animator.AnimatorListener`",
"HarmonyOS 监听器": "`AnimatorResult` 回调",
"映射说明": "动画生命周期",
"代码示例对比": "Android: `animator.addListener(object: Animator.AnimatorListener { override fun onAnimationStart(animation: Animator) {} override fun onAnimationEnd(animation: Animator) {} })`<br/>HarmonyOS: `animateTo({ duration: 1000, onFinish: () => { /* 动画结束 */ } }, () => { /* 动画内容 */ })`"
},
{
"Android 监听器": "`ValueAnimator.AnimatorUpdateListener`",
"HarmonyOS 监听器": "`AnimatorResult` 回调",
"映射说明": "动画更新",
"代码示例对比": "Android: `valueAnimator.addUpdateListener { animation -> val value = animation.animatedValue as Float }`<br/>HarmonyOS: 状态自动更新,无需回调"
}
],
"raw_table": [
[
"Android 监听器",
"HarmonyOS 监听器",
"映射说明",
"代码示例对比"
],
[
"`Animator.AnimatorListener`",
"`AnimatorResult` 回调",
"动画生命周期",
"Android: `animator.addListener(object: Animator.AnimatorListener { override fun onAnimationStart(animation: Animator) {} override fun onAnimationEnd(animation: Animator) {} })`<br/>HarmonyOS: `animateTo({ duration: 1000, onFinish: () => { /* 动画结束 */ } }, () => { /* 动画内容 */ })`"
],
[
"`ValueAnimator.AnimatorUpdateListener`",
"`AnimatorResult` 回调",
"动画更新",
"Android: `valueAnimator.addUpdateListener { animation -> val value = animation.animatedValue as Float }`<br/>HarmonyOS: 状态自动更新,无需回调"
]
]
},
{
"table_index": 36,
"rows": [
{
"Android 功能": "`animator.start()`",
"HarmonyOS 功能": "`animateTo()` 自动执行",
"映射说明": "启动动画",
"代码示例对比": "Android: `animator.start()`<br/>HarmonyOS: `animateTo({}, () => { /* 状态变化即启动 */ })`"
},
{
"Android 功能": "`animator.cancel()`",
"HarmonyOS 功能": "`AnimatorResult.cancel()`",
"映射说明": "取消动画",
"代码示例对比": "Android: `animator.cancel()`<br/>HarmonyOS: `animatorResult.cancel()`"
},
{
"Android 功能": "`animator.pause()`",
"HarmonyOS 功能": "无直接对应",
"映射说明": "暂停动画",
"代码示例对比": "HarmonyOS 需自定义实现"
},
{
"Android 功能": "`animator.resume()`",
"HarmonyOS 功能": "无直接对应",
"映射说明": "恢复动画",
"代码示例对比": "HarmonyOS 需自定义实现"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例对比"
],
[
"`animator.start()`",
"`animateTo()` 自动执行",
"启动动画",
"Android: `animator.start()`<br/>HarmonyOS: `animateTo({}, () => { /* 状态变化即启动 */ })`"
],
[
"`animator.cancel()`",
"`AnimatorResult.cancel()`",
"取消动画",
"Android: `animator.cancel()`<br/>HarmonyOS: `animatorResult.cancel()`"
],
[
"`animator.pause()`",
"无直接对应",
"暂停动画",
"HarmonyOS 需自定义实现"
],
[
"`animator.resume()`",
"无直接对应",
"恢复动画",
"HarmonyOS 需自定义实现"
]
]
},
{
"table_index": 37,
"rows": [
{
"Android 功能": "`View.startDragAndDrop()`",
"HarmonyOS 功能": "`Drag` 装饰器",
"映射说明": "拖拽启动",
"代码示例对比": "Android: `view.startDragAndDrop(clipData, myShadow, null, 0)`<br/>HarmonyOS: `Component().gesture(Drag())`"
},
{
"Android 功能": "`OnDragListener`",
"HarmonyOS 功能": "`Drag` 回调",
"映射说明": "拖拽监听",
"代码示例对比": "Android: `view.setOnDragListener { _, event -> when (event.action) { DragEvent.ACTION_DROP -> } }`<br/>HarmonyOS: `Component().gesture(Drag().onActionStart(() => {}).onAction((event) => {}).onActionEnd(() => {}))`"
},
{
"Android 功能": "`DragEvent.ACTION_DRAG_STARTED`",
"HarmonyOS 功能": "`Drag` onActionStart",
"映射说明": "拖拽开始",
"代码示例对比": "`onActionStart(() => { /* 拖拽开始 */ })`"
},
{
"Android 功能": "`DragEvent.ACTION_DRAG_LOCATION`",
"HarmonyOS 功能": "`Drag` onAction",
"映射说明": "拖拽进行中",
"代码示例对比": "`onAction((event: GestureEvent) => { /* 拖拽位置 */ })`"
},
{
"Android 功能": "`DragEvent.ACTION_DROP`",
"HarmonyOS 功能": "`Drop` 装饰器",
"映射说明": "放置",
"代码示例对比": "`Component().gesture(Drop().onDrop((event) => { /* 处理放置 */ }))`"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例对比"
],
[
"`View.startDragAndDrop()`",
"`Drag` 装饰器",
"拖拽启动",
"Android: `view.startDragAndDrop(clipData, myShadow, null, 0)`<br/>HarmonyOS: `Component().gesture(Drag())`"
],
[
"`OnDragListener`",
"`Drag` 回调",
"拖拽监听",
"Android: `view.setOnDragListener { _, event -> when (event.action) { DragEvent.ACTION_DROP -> } }`<br/>HarmonyOS: `Component().gesture(Drag().onActionStart(() => {}).onAction((event) => {}).onActionEnd(() => {}))`"
],
[
"`DragEvent.ACTION_DRAG_STARTED`",
"`Drag` onActionStart",
"拖拽开始",
"`onActionStart(() => { /* 拖拽开始 */ })`"
],
[
"`DragEvent.ACTION_DRAG_LOCATION`",
"`Drag` onAction",
"拖拽进行中",
"`onAction((event: GestureEvent) => { /* 拖拽位置 */ })`"
],
[
"`DragEvent.ACTION_DROP`",
"`Drop` 装饰器",
"放置",
"`Component().gesture(Drop().onDrop((event) => { /* 处理放置 */ }))`"
]
]
},
{
"table_index": 38,
"rows": [
{
"Android 功能": "`DragEvent.ACTION_DROP`",
"HarmonyOS 功能": "`Drop` onDrop",
"映射说明": "放置目标",
"代码示例": "`DropContainer().gesture(Drop().onDrop((event) => { /* 处理数据放置 */ }))`"
},
{
"Android 功能": "`ClipData` 传递",
"HarmonyOS 功能": "`Drop` event 参数",
"映射说明": "数据传递",
"代码示例": "通过 gesture event 传递数据"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 功能",
"映射说明",
"代码示例"
],
[
"`DragEvent.ACTION_DROP`",
"`Drop` onDrop",
"放置目标",
"`DropContainer().gesture(Drop().onDrop((event) => { /* 处理数据放置 */ }))`"
],
[
"`ClipData` 传递",
"`Drop` event 参数",
"数据传递",
"通过 gesture event 传递数据"
]
]
},
{
"table_index": 39,
"rows": [
{
"Android 属性": "`setContentDescription(CharSequence)`",
"HarmonyOS 属性": "`accessibilityText`",
"映射说明": "无障碍文本",
"代码示例对比": "Android: `view.setContentDescription(\"描述文本\")`<br/>HarmonyOS: `Component().accessibilityText(\"描述文本\")`"
},
{
"Android 属性": "`setImportantForAccessibility(int)`",
"HarmonyOS 属性": "`accessibilityLevel`",
"映射说明": "无障碍重要性",
"代码示例对比": "Android: `view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES)`<br/>HarmonyOS: `Component().accessibilityLevel(AccessibilityLevel.AUTO)`"
},
{
"Android 属性": "`setAccessibilityDelegate()`",
"HarmonyOS 属性": "无直接对应",
"映射说明": "无障碍代理",
"代码示例对比": "需自定义实现"
},
{
"Android 属性": "`announceForAccessibility(CharSequence)`",
"HarmonyOS 属性": "无直接对应",
"映射说明": "公告通知",
"代码示例对比": "需使用系统 API"
}
],
"raw_table": [
[
"Android 属性",
"HarmonyOS 属性",
"映射说明",
"代码示例对比"
],
[
"`setContentDescription(CharSequence)`",
"`accessibilityText`",
"无障碍文本",
"Android: `view.setContentDescription(\"描述文本\")`<br/>HarmonyOS: `Component().accessibilityText(\"描述文本\")`"
],
[
"`setImportantForAccessibility(int)`",
"`accessibilityLevel`",
"无障碍重要性",
"Android: `view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES)`<br/>HarmonyOS: `Component().accessibilityLevel(AccessibilityLevel.AUTO)`"
],
[
"`setAccessibilityDelegate()`",
"无直接对应",
"无障碍代理",
"需自定义实现"
],
[
"`announceForAccessibility(CharSequence)`",
"无直接对应",
"公告通知",
"需使用系统 API"
]
]
},
{
"table_index": 40,
"rows": [
{
"Android 功能": "**拖放系统**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`ClipData` 系统拖放",
"HarmonyOS 替代方案": "自定义拖拽",
"难度等级": "困难",
"说明": "HarmonyOS 没有 ClipData 系统,需自定义数据传递"
},
{
"Android 功能": "`DragEvent.ACTION_DRAG_ENTERED/EXITED`",
"HarmonyOS 替代方案": "自定义边界检测",
"难度等级": "中等",
"说明": "需手动判断拖拽进入/离开区域"
},
{
"Android 功能": "**高级焦点功能**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`FocusFinder` 查找算法",
"HarmonyOS 替代方案": "`focusControl` API",
"难度等级": "中等",
"说明": "系统自动处理,无手动查找需求"
},
{
"Android 功能": "`setOnFocusChangeListener` 的精确时机",
"HarmonyOS 替代方案": "`onFocus` / `onBlur`",
"难度等级": "简单",
"说明": "时机略有差异,需调整逻辑"
},
{
"Android 功能": "**触摸事件细节**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`MotionEvent.getToolType()`",
"HarmonyOS 替代方案": "`toolType` 属性",
"难度等级": "简单",
"说明": "部分支持,工具类型有限"
},
{
"Android 功能": "`MotionEvent.getAxisValue()`",
"HarmonyOS 替代方案": "无直接对应",
"难度等级": "中等",
"说明": "手柄、滚轮等高级输入暂不支持"
},
{
"Android 功能": "`MotionEvent.getSource()`",
"HarmonyOS 替代方案": "无直接对应",
"难度等级": "中等",
"说明": "输入源判断需自定义"
},
{
"Android 功能": "**手势冲突高级处理**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`onInterceptTouchEvent()` 嵌套拦截",
"HarmonyOS 替代方案": "`onTouchIntercept` 级联",
"难度等级": "简单",
"说明": "API 20/21 提供了更强大的拦截机制"
},
{
"Android 功能": "**动画高级功能**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`Animator.pause()` / `resume()`",
"HarmonyOS 替代方案": "自定义状态管理",
"难度等级": "中等",
"说明": "需要手动控制动画状态"
},
{
"Android 功能": "`AnimatorListener.onAnimationRepeat()`",
"HarmonyOS 替代方案": "自定义重复逻辑",
"难度等级": "中等",
"说明": "HarmonyOS 无重复回调,需手动实现"
},
{
"Android 功能": "`LayoutTransition`",
"HarmonyOS 替代方案": "自定义布局动画",
"难度等级": "困难",
"说明": "需要监听组件添加/删除"
},
{
"Android 功能": "`ViewPropertyAnimator` 组合",
"HarmonyOS 替代方案": "链式 `animateTo`",
"难度等级": "简单",
"说明": "语法不同,功能类似"
},
{
"Android 功能": "**键盘事件细节**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`KeyEvent` 完整事件体系",
"HarmonyOS 替代方案": "`KeyEvent` 简化版",
"难度等级": "中等",
"说明": "HarmonyOS 键盘事件较为简化"
},
{
"Android 功能": "`dispatchKeyShortcutEvent()`",
"HarmonyOS 替代方案": "无直接对应",
"难度等级": "中等",
"说明": "快捷键处理需自定义"
},
{
"Android 功能": "`onKeyLongPress()`",
"HarmonyOS 替代方案": "自定义延时判断",
"难度等级": "简单",
"说明": "需要计时逻辑"
},
{
"Android 功能": "**多窗口交互**",
"HarmonyOS 替代方案": "",
"难度等级": "",
"说明": ""
},
{
"Android 功能": "`onMultiWindowModeChanged()`",
"HarmonyOS 替代方案": "无直接对应",
"难度等级": "不可行",
"说明": "HarmonyOS 无多窗口模式"
},
{
"Android 功能": "`onPictureInPictureModeChanged()`",
"HarmonyOS 替代方案": "无直接对应",
"难度等级": "不可行",
"说明": "HarmonyOS 无画中画模式"
}
],
"raw_table": [
[
"Android 功能",
"HarmonyOS 替代方案",
"难度等级",
"说明"
],
[
"**拖放系统**",
"",
"",
""
],
[
"`ClipData` 系统拖放",
"自定义拖拽",
"困难",
"HarmonyOS 没有 ClipData 系统,需自定义数据传递"
],
[
"`DragEvent.ACTION_DRAG_ENTERED/EXITED`",
"自定义边界检测",
"中等",
"需手动判断拖拽进入/离开区域"
],
[
"**高级焦点功能**",
"",
"",
""
],
[
"`FocusFinder` 查找算法",
"`focusControl` API",
"中等",
"系统自动处理,无手动查找需求"
],
[
"`setOnFocusChangeListener` 的精确时机",
"`onFocus` / `onBlur`",
"简单",
"时机略有差异,需调整逻辑"
],
[
"**触摸事件细节**",
"",
"",
""
],
[
"`MotionEvent.getToolType()`",
"`toolType` 属性",
"简单",
"部分支持,工具类型有限"
],
[
"`MotionEvent.getAxisValue()`",
"无直接对应",
"中等",
"手柄、滚轮等高级输入暂不支持"
],
[
"`MotionEvent.getSource()`",
"无直接对应",
"中等",
"输入源判断需自定义"
],
[
"**手势冲突高级处理**",
"",
"",
""
],
[
"`onInterceptTouchEvent()` 嵌套拦截",
"`onTouchIntercept` 级联",
"简单",
"API 20/21 提供了更强大的拦截机制"
],
[
"**动画高级功能**",
"",
"",
""
],
[
"`Animator.pause()` / `resume()`",
"自定义状态管理",
"中等",
"需要手动控制动画状态"
],
[
"`AnimatorListener.onAnimationRepeat()`",
"自定义重复逻辑",
"中等",
"HarmonyOS 无重复回调,需手动实现"
],
[
"`LayoutTransition`",
"自定义布局动画",
"困难",
"需要监听组件添加/删除"
],
[
"`ViewPropertyAnimator` 组合",
"链式 `animateTo`",
"简单",
"语法不同,功能类似"
],
[
"**键盘事件细节**",
"",
"",
""
],
[
"`KeyEvent` 完整事件体系",
"`KeyEvent` 简化版",
"中等",
"HarmonyOS 键盘事件较为简化"
],
[
"`dispatchKeyShortcutEvent()`",
"无直接对应",
"中等",
"快捷键处理需自定义"
],
[
"`onKeyLongPress()`",
"自定义延时判断",
"简单",
"需要计时逻辑"
],
[
"**多窗口交互**",
"",
"",
""
],
[
"`onMultiWindowModeChanged()`",
"无直接对应",
"不可行",
"HarmonyOS 无多窗口模式"
],
[
"`onPictureInPictureModeChanged()`",
"无直接对应",
"不可行",
"HarmonyOS 无画中画模式"
]
]
}
]