OpenHarmony按钮支持的主要事件
点击事件是按钮最常用的交互事件,当用户点击按钮时触发。可以通过onClick属性(内联回调)或addClickListener方法(监听器)注册处理逻辑,回调函数会接收事件对象(包含点击位置坐标等信息)。
示例代码:
Button("Click Me")
.onClick((e) => {
console.info(`Button clicked at (${e.x}, ${e.y})`);
});
或
button.addClickListener(() => {
console.log("Button clicked");
});
长按事件在用户长按按钮(持续按压超过系统阈值)时触发。支持通过onLongPress属性或addLongPressListener方法注册处理逻辑,常用于实现“长按删除”“长按编辑”等功能。
示例代码:
Button("Long Press Me")
.onLongPress(() => {
console.log("Button long pressed");
});
触摸事件覆盖用户与按钮交互的全过程(按下、移动、释放),通过setOnTouchListener方法注册监听器,回调函数接收TouchEvent对象(包含动作类型:ACTION_DOWN/ACTION_UP/ACTION_MOVE)。适用于需要精细控制触摸行为的场景(如拖拽按钮、绘制轨迹)。
示例代码:
button.setOnTouchListener((event) => {
switch (event.action) {
case MotionEvent.ACTION_DOWN:
console.log("Button pressed down");
break;
case MotionEvent.ACTION_UP:
console.log("Button released");
break;
case MotionEvent.ACTION_MOVE:
console.log("Finger moved on button");
break;
}
return true; // 返回true表示事件已处理
});
按键事件适用于可获焦组件(如Button),当用户通过键盘、遥控器等输入设备按下或释放按键时触发。通过onKeyEvent属性注册回调函数,回调函数接收KeyEvent对象(包含按键类型、键码、输入设备类型等信息),支持事件冒泡阻塞(stopPropagation方法)。
示例代码:
Button("Key Event Button")
.onKeyEvent((event) => {
if (event.type === KeyType.Down) {
console.log(`Key pressed: ${event.keyText}`);
} else if (event.type === KeyType.Up) {
console.log(`Key released: ${event.keyText}`);
}
event.stopPropagation(); // 阻止事件冒泡
});
焦点事件在按钮获得或失去焦点时触发,适用于需要处理焦点状态的场景(如输入框焦点切换、焦点样式变化)。通过onFocus(获得焦点)和onBlur(失去焦点)属性注册回调函数,无事件冒泡。
示例代码:
Button("Focus Button")
.onFocus(() => {
console.log("Button gained focus");
})
.onBlur(() => {
console.log("Button lost focus");
});
鼠标事件在用户使用鼠标与按钮交互时触发(如点击、悬浮、移动),通过addMouseListener方法注册监听器,回调函数接收MouseEvent对象(包含鼠标位置、按键、动作等信息)。适用于支持鼠标的设备(如平板搭配外接鼠标)。
示例代码:
button.addMouseListener({
onClick: (event) => {
console.log(`Mouse clicked at (${event.x}, ${event.y})`);
},
onHover: (isHover) => {
console.log(`Mouse ${isHover ? 'entered' : 'exited'} button`);
}
});
虽然不是传统意义上的“事件”,但悬浮态是按钮在鼠标悬浮时的视觉反馈,通过hoverEffect属性设置(可选Auto/Highlight/None),属于交互的一部分。默认值为Auto(系统自动处理悬浮效果)。
示例代码:
Button("Hover Button")
.hoverEffect(HoverEffect.Highlight); // 鼠标悬浮时高亮显示
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。