智能客服
你问我答,随时在线为你解决问题
监听基础输入事件,在UIContext进行事件分发前统一拦截和过滤输入事件,适用于全局快捷键处理、输入安全过滤、特定页面统一屏蔽鼠标、触摸或按键输入等需要在事件到达组件前进行统一管控的场景,使用示例请参考addLocalInputEventMonitor。
起始版本: 26.0.0
输入事件监听器标识对象。
此对象由系统创建并返回,作为监听器的唯一标识。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
type InputEventListener = (event: RawInputEventWrapper) => InputEventInterceptResult
输入事件监听器回调函数类型。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| event | RawInputEventWrapper | 是 | 输入事件包装器,系统自动创建和传递,开发者无需手动创建。 |
返回值:
| 类型 | 说明 |
|---|---|
| InputEventInterceptResult | 事件拦截结果。 |
输入事件拦截结果接口,用于监听器回调InputEventListener返回是否阻止事件传递的决策。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| action | InputEventInterceptAction | 否 | 否 | 输入事件拦截动作。 CONTINUE:允许事件继续传递到UI框架。 BLOCK:阻止事件传递到UI框架。 |
原始输入事件包装器类。
提供统一的接口来访问不同类型的输入事件,确保类型安全和向后兼容性。
此类封装了原始的MouseEvent、TouchEvent或KeyEvent对象,并通过类型安全的方法访问。
此类为抽象类,开发者无法自行创建实例。系统会在触发输入事件监听器时自动创建实例,并将实例传递给回调函数。
起始版本: 26.0.0
由于监听器在事件派发给具体组件之前执行,事件中的以下字段和方法将无法提供有效值:触发对象target、相对于组件的坐标(x、y)、getCurrentLocalPosition和stopPropagation方法、TouchEvent的preventDefault和getHistoricalPoints方法以及KeyEvent的metaKey属性和getModifierKeyState方法。
示例:
const listener: InputEventListener = (wrapper: RawInputEventWrapper) => {
// 使用类型判断 + 获取事件对象
if (wrapper.isMouseEvent()) {
const mouseEvent = wrapper.asMouseEvent()!;
console.info(`Mouse: (${mouseEvent.windowX}, ${mouseEvent.windowY})`);
return { action: InputEventInterceptAction.CONTINUE };
}
if (wrapper.isTouchEvent()) {
const touchEvent = wrapper.asTouchEvent()!;
console.info(`Touch: ${touchEvent.touches.length} points`);
return { action: InputEventInterceptAction.CONTINUE };
}
if (wrapper.isKeyEvent()) {
const keyEvent = wrapper.asKeyEvent()!;
console.info(`Key: ${keyEvent.keyText}`);
return { action: InputEventInterceptAction.CONTINUE };
}
return { action: InputEventInterceptAction.CONTINUE };
}; isMouseEvent(): boolean
判断是否为鼠标事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 判断是否为鼠标事件,如果是鼠标事件则返回true,否则返回false。 |
isTouchEvent(): boolean
判断是否为触摸事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 判断是否为触摸事件,如果是触摸事件则返回true,否则返回false。 |
isKeyEvent(): boolean
判断是否为按键事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| boolean | 判断是否为按键事件,如果是按键事件则返回true,否则返回false。 |
asMouseEvent(): MouseEvent | null
获取鼠标事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| MouseEvent | null | 获取鼠标事件,如果是鼠标事件则返回事件对象,否则返回null。由于监听器在事件派发给具体组件之前执行,返回的MouseEvent中触发对象target、相对于组件的坐标x和y等字段无法提供有效值。 |
asTouchEvent(): TouchEvent | null
获取触摸事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| TouchEvent | null | 获取触摸事件,如果是触摸事件则返回事件对象,否则返回null。由于监听器在事件派发给具体组件之前执行,返回的TouchEvent中getCurrentLocalPosition、stopPropagation、preventDefault和getHistoricalPoints等方法无法提供有效值。 |
asKeyEvent(): KeyEvent | null
获取按键事件。
起始版本: 26.0.0
元服务API: 从API版本26.0.0开始,该接口支持在元服务中使用。
系统能力: SystemCapability.ArkUI.ArkUI.Full
模型约束: 此接口仅可在Stage模型下使用。
返回值:
| 类型 | 说明 |
|---|---|
| KeyEvent | null | 获取按键事件,如果是按键事件则返回事件对象,否则返回null。由于监听器在事件派发给具体组件之前执行,返回的KeyEvent中metaKey属性和getModifierKeyState方法无法提供有效值。 |