文档管理中心
推荐
最热
最新
其他
已解决
未解决
没有账号认证服务的应用怎么在应用内设计账号校验来实现应用高级功能购买以及恢复购买的功能

评论0

浏览 3

发布于2分钟前
更新成鸿蒙7后,手机发烫问题能解决吗

评论1

浏览 31

发布于14分钟前
第二批8月几号啊,这个月是不是有花粉beta

评论3

浏览 129

发布于25分钟前
翻了最新的文档,没找到多少资料,是哪个组件?还是设计规范。

评论79

浏览 19.3k

发布于2026-03-30 18:09
华为的地图是否可以用于安卓端,怎么收费

评论0

浏览 16

发布于28分钟前
使用音乐播放器放歌的时候,暂停没用,只要在别的软件一语音说话完后,自动就播放音乐

评论0

浏览 27

发布于1小时前
问题描述使用DevEco Code辅助编程时,当鼠标移过终端区域时,右上角会显示复制窗口,提示复制了多少个字符到剪贴板。很干扰正常的复制粘贴,能不能关闭此功能?DevEco Code刚开始没有这个问题,后来升级到0.1.2和0.1.3后出现这个问题。版本信息手机系统版本6.1.0.135、刚开始安装的DevEco Studio 26.0.0 Beta1,以为是该版本的问题,卸载后安装DevEco Studio 6.1.1 Release和DevEco Code,DevEco Code还是会弹出自动复制到剪贴板的对话框。

评论0

浏览 21

发布于1小时前
已解决
鸿蒙7推送
nova13系列还会推送鸿蒙7吗?如果会要多久

评论171

浏览 22.9k

发布于2026-06-17 23:49
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-inputeventmonitor#inputeventmonitorapi26 新增了能够获取所有输入的接口,但是 我用 addLocalInputEventMonitor 能够获取到用户按了 meta按键这种特殊按键,但是会触发系统弹出开始菜单,  有什么办法,能够完全拦截按键输入嘛, 而不让系统响应? (C API的那个我知道,仅考虑当前这个)import { InputEventLog } from '../model/InputEventLog'; const MAX_EVENTS: number = 200; @Entry @Component struct Index { @State events: InputEventLog[] = []; @State isMonitoring: boolean = false; @State isBlocking: boolean = false; @State totalCount: number = 0; private monitor: InputEventMonitor | undefined = undefined; private nextId: number = 0; aboutToAppear(): void { this.startMonitor(); } aboutToDisappear(): void { this.stopMonitor(); } startMonitor(): void { if (this.isMonitoring) { return; } const ctx = this.getUIContext(); const listener: InputEventListener = (wrapper: RawInputEventWrapper): InputEventInterceptResult => { const log: InputEventLog = new InputEventLog(); log.id = this.nextId; this.nextId = this.nextId + 1; log.timestamp = this.formatTime(); if (wrapper.isKeyEvent()) { const keyEvt = wrapper.asKeyEvent(); if (keyEvt !== null) { log.eventType = 'KEY'; const actionStr: string = keyEvt.type === KeyType.Down ? 'DOWN' : 'UP'; log.detail = `code=${keyEvt.keyCode} text=${keyEvt.keyText}`; } else { log.eventType = 'KEY'; log.detail = 'null key event'; } } else if (wrapper.isMouseEvent()) { const mouseEvt = wrapper.asMouseEvent(); if (mouseEvt !== null) { log.eventType = 'MOUSE'; const actStr: string = this.mouseActionName(mouseEvt.action); const btnStr: string = this.mouseButtonName(mouseEvt.button); log.detail = `${actStr} btn=${btnStr} x=${mouseEvt.windowX} y=${mouseEvt.windowY}`; } else { log.eventType = 'MOUSE'; log.detail = 'null mouse event'; } } else if (wrapper.isTouchEvent()) { const touchEvt = wrapper.asTouchEvent(); if (touchEvt !== null) { log.eventType = 'TOUCH'; const touchStr: string = this.touchTypeName(touchEvt.type); log.detail = `${touchStr} fingers=${touchEvt.touches.length}`; } else { log.eventType = 'TOUCH'; log.detail = 'null touch event'; } } else { log.eventType = 'OTHER'; log.detail = 'unknown'; } this.appendEvent(log); if (this.isBlocking) { const result: InputEventInterceptResult = { action: InputEventInterceptAction.BLOCK }; return result; } const result: InputEventInterceptResult = { action: InputEventInterceptAction.CONTINUE }; return result; }; const eventMask: number = InputEventSubTypeMask.LEFT_MOUSE_DOWN | InputEventSubTypeMask.LEFT_MOUSE_UP | InputEventSubTypeMask.RIGHT_MOUSE_DOWN | InputEventSubTypeMask.RIGHT_MOUSE_UP | InputEventSubTypeMask.MIDDLE_MOUSE_DOWN | InputEventSubTypeMask.MIDDLE_MOUSE_UP | InputEventSubTypeMask.LEFT_MOUSE_DRAGGING | InputEventSubTypeMask.RIGHT_MOUSE_DRAGGING | InputEventSubTypeMask.MIDDLE_MOUSE_DRAGGING | InputEventSubTypeMask.TOUCH_DOWN | InputEventSubTypeMask.TOUCH_UP | InputEventSubTypeMask.KEY_DOWN | InputEventSubTypeMask.KEY_UP; this.monitor = ctx.addLocalInputEventMonitor(eventMask, listener); this.isMonitoring = true; } stopMonitor(): void { if (this.monitor !== undefined) { this.getUIContext().removeLocalInputEventMonitor(this.monitor); this.monitor = undefined; } this.isMonitoring = false; } clearEvents(): void { this.events = []; } appendEvent(log: InputEventLog): void { const newList: InputEventLog[] = [log]; const limit: number = MAX_EVENTS - 1; const len: number = this.events.length; const count: number = len < limit ? len : limit; for (let i = 0; i < count; i++) { newList.push(this.events[i]); } this.events = newList; this.totalCount = this.totalCount + 1; } mouseActionName(action: number): string { if (action === 1) { return 'PRESS'; } if (action === 2) { return 'MOVE'; } if (action === 3) { return 'RELEASE'; } return `A${action}`; } mouseButtonName(button: number): string { if (button === 0) { return 'NONE'; } if (button === 1) { return 'LEFT'; } if (button === 2) { return 'RIGHT'; } if (button === 3) { return 'MID'; } if (button === 4) { return 'BACK'; } if (button === 5) { return 'FWD'; } return `B${button}`; } touchTypeName(type: TouchType): string { if (type === TouchType.Down) { return 'DOWN'; } if (type === TouchType.Up) { return 'UP'; } if (type === TouchType.Move) { return 'MOVE'; } if (type === TouchType.Cancel) { return 'CANCEL'; } return `T${type}`; } getTypeColor(type: string): string { if (type === 'KEY') { return '#E74C3C'; } if (type === 'MOUSE') { return '#3498DB'; } if (type === 'TOUCH') { return '#2ECC71'; } return '#95A5A6'; } formatTime(): string { const d: Date = new Date(); const h: number = d.getHours(); const m: number = d.getMinutes(); const s: number = d.getSeconds(); const ms: number = d.getMilliseconds(); const hStr: string = h < 10 ? '0' + h.toString() : h.toString(); const mStr: string = m < 10 ? '0' + m.toString() : m.toString(); const sStr: string = s < 10 ? '0' + s.toString() : s.toString(); const msStr: string = ms < 100 ? (ms < 10 ? '00' + ms.toString() : '0' + ms.toString()) : ms.toString(); return `${hStr}:${mStr}:${sStr}.${msStr}`; } build() { Column() { Row() { Text('Input Monitor') .fontSize(18) .fontWeight(FontWeight.Bold) .fontColor('#FFFFFF') Blank() Text(this.isMonitoring ? (this.isBlocking ? '● BLOCK' : '● LIVE') : '○ STOPPED') .fontSize(11) .fontColor(this.isMonitoring ? '#2ECC71' : '#E74C3C') } .width('100%') .padding({ left: 16, right: 16, top: 12, bottom: 12 }) .backgroundColor('#2C3E50') Row() { Button(this.isMonitoring ? 'Stop' : 'Start') .fontSize(13) .type(ButtonType.Capsule) .backgroundColor(this.isMonitoring ? '#E74C3C' : '#2ECC71') .fontColor('#FFFFFF') .onClick(() => { if (this.isMonitoring) { this.stopMonitor(); } else { this.startMonitor(); } }) Button(this.isBlocking ? 'Block ON' : 'Block OFF') .fontSize(13) .type(ButtonType.Capsule) .backgroundColor(this.isBlocking ? '#E74C3C' : '#95A5A6') .fontColor('#FFFFFF') .margin({ left: 8 }) .onClick(() => { this.isBlocking = !this.isBlocking; }) Button('Clear') .fontSize(13) .type(ButtonType.Capsule) .backgroundColor('#3498DB') .fontColor('#FFFFFF') .margin({ left: 8 }) .onClick(() => { this.clearEvents(); }) } .width('100%') .padding({ left: 16, right: 16, top: 10, bottom: 10 }) Row() { Text(`Total: ${this.totalCount}`) .fontSize(11) .fontColor(Color.Gray) Blank() Text(`Display: ${this.events.length}/${MAX_EVENTS}`) .fontSize(11) .fontColor(Color.Gray) } .width('100%') .padding({ left: 16, right: 16, bottom: 8 }) if (this.events.length === 0) { Column() { Text('Waiting for input events...') .fontSize(14) .fontColor('#AAAAAA') Text('Press keys / move mouse / touch screen') .fontSize(11) .fontColor('#CCCCCC') .margin({ top: 4 }) } .width('100%') .layoutWeight(1) .justifyContent(FlexAlign.Center) } else { List() { ForEach(this.events, (item: InputEventLog) => { ListItem() { Row() { Text(`[${item.eventType}]`) .fontColor(this.getTypeColor(item.eventType)) .fontWeight(FontWeight.Bold) .fontSize(10) .margin({ right: 6 }) Text(item.detail) .fontSize(11) .layoutWeight(1) .maxLines(1) .textOverflow({ overflow: TextOverflow.Ellipsis }) Text(item.timestamp) .fontSize(9) .fontColor('#AAAAAA') } .width('100%') .padding({ left: 16, right: 16, top: 7, bottom: 7 }) .alignItems(VerticalAlign.Center) } }, (item: InputEventLog) => item.id.toString()) } .width('100%') .layoutWeight(1) .divider({ strokeWidth: 0.5, color: '#EEEEEE' }) } } .width('100%') .height('100%') .backgroundColor('#F8F9FA') } }

评论2

浏览 23

发布于1小时前
就比如QQ在登陆游戏界面无法切换账号 抖音看不了日常发出来的日常找不到在哪 给列表发完消息之后转发还要再重新找 转发的顺序能不能按照聊天的最新发消息的顺序来  还有锁屏要是能自定义显示时间的大小就好了

评论2

浏览 23

发布于2小时前
4.0主题版本自定义创意个性化混搭diy到目前升级几个版本了为啥迟迟不升级???卡片自定义随意改变大小接近全屏,图标自定义图案换照片,动态壁纸。难不成为了现在升级的主题来割韭菜吗???七八千手机自带前后双录功能给整没了啥意思???不给恢复就投诉了!!!

评论2

浏览 34

发布于2小时前
第二批推送是第一批结束立马推送吗?

评论136

浏览 10.5k

发布于2026-06-20 14:45
子非鱼
|
采纳答复
点赞7
回复于2026-06-20 16:01
现在关于M40升级到纯血的讨论已经从给40升不给50升的舆论压力转向搭载麒麟9000芯片的M40因为设计原因不满足纯血的安全需求,就算可以升到纯血也会阉割部分功能。那说明官方已经有在做M40的纯血系统适配并且内部测试过了,比之前的内测要更大范围,所以有没有能给想升级到纯血系统开一个申请渠道,给一个体验的机会。当然这也会有不能给50升级的问题,还是说针对骁龙也有纯血方案,期待一下。

评论7

浏览 98

发布于3小时前
估计70系列升鸿蒙7.0到年底了!哎累

评论10

浏览 189

发布于3小时前
mate80PrO什么时候可以升级鸿蒙7

评论7

浏览 229

发布于昨天23:56
升级完鸿蒙7.0以后,所有的系统内都没有变化,没有7.0的任何特效及功能咋回事啊?

评论46

浏览 5.3k

发布于2026-06-30 14:43
小鹿
|
采纳答复
点赞4
回复于2026-06-30 23:27
我这个手机下载9号出行APP连接不上?

评论5

浏览 89

发布于昨天17:15

评论4

浏览 77

发布于昨天16:20
已解决
升级鸿蒙7
nova15系列能升级鸿蒙7吗

评论9

浏览 556

发布于昨天15:30
子非鱼
|
采纳答复
点赞
回复于昨天16:00
Mate 80 Pro Max机型(设备型号代码:SGT-AL10),请问什么时候可以申请加入本轮招募白名单及开放呢?

评论45

浏览 4.4k

发布于2026-06-21 10:44
在module.json5中的metadata字段中设置 configColorModeChangePerformanceInArkUI 为 true 会导致悬浮页签的遮罩层颜色不随系统和应用颜色模式的切换而改变。

评论3

浏览 45

发布于昨天15:11
空瞳
|
采纳答复
这是开启深浅色切换性能优化后的组件适配问题。`configColorModeChangePerformanceInArkUI=true` 会让颜色模式切换不再全量执行前端构建和属性设置;目前 `HdsTabs` 等 HDS 高级组件没有完全适配该优化,所以悬浮页签内部材质/遮罩可能继续使用切换前的颜色。有两种处理方式:1. 暂时不需要这项优化时,删除该 metadata,或改为:```"metadata": [  {    "name": "configColorModeChangePerformanceInArkUI",    "value": "false"  }]```然后清理构建产物并重新安装应用。这样切换颜色模式会恢复全量属性刷新,也是当前最直接的规避方案。2. 需要保留优化时,显式监听颜色模式并用状态变量更新遮罩色。`HdsTabsFloatingStyle.gradientMask` 支持通过 `maskColor` 设置遮罩颜色,可按下面方式处理:```// MyAbilityStage.etsimport { AbilityStage, Configuration } from '@kit.AbilityKit';export default class MyAbilityStage extends AbilityStage {  onCreate(): void {    AppStorage.setOrCreate('colorMode', this.context.config.colorMode);  }  onConfigurationUpdate(newConfig: Configuration): void {    AppStorage.setOrCreate('colorMode', newConfig.colorMode);  }}``````// 页面中import { ConfigurationConstant } from '@kit.AbilityKit';@StorageLink('colorMode') @Watch('syncTabsColor')private colorMode: ConfigurationConstant.ColorMode =  ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET;@State private tabsMaskColor: ResourceColor =  $r('app.color.tabs_mask_light');aboutToAppear(): void {  this.syncTabsColor();}private syncTabsColor(): void {  this.tabsMaskColor = this.colorMode ===    ConfigurationConstant.ColorMode.COLOR_MODE_DARK    ? $r('app.color.tabs_mask_dark')    : $r('app.color.tabs_mask_light');}// HdsTabs 的属性.barFloatingStyle({  gradientMask: {    maskColor: this.tabsMaskColor  }})```同时在 `base/element/color.json` 和 `dark/element/color.json` 中准备对应颜色资源。如果应用通过 `setColorMode` 主动切换模式,还应在调用 `setColorMode` 的同一处同步更新 `AppStorage`,因为这种主动切换场景不能只依赖 `onConfigurationUpdate`。如果遮罩使用的是组件内部默认材质且没有显式传入 `maskColor`,建议优先采用方案 1;若保留优化,则显式设置并用状态变量驱动 `maskColor`。
点赞
回复于昨天15:23
写完代码发现传不了?????

评论8

浏览 126

发布于昨天14:34
自动亮度给老年人用的吗??亮瞎了。能不能搞个降低白色点???眼睛都看坏了

评论5

浏览 62

发布于昨天14:34
组件导航的底部工具栏如何变成悬浮态,并且有沉浸光感(半透明毛玻璃)效果?

评论27

浏览 4.1k

发布于2026-04-10 05:32

我要提问题

月度答复贡献榜
用户头像
空瞳
回帖477
粉丝37
关注
用户头像
蓝瘦的蜕变
回帖304
粉丝67
关注
用户头像
不羁的木木
回帖270
粉丝28
关注
用户头像
大雷神
回帖256
粉丝16
关注
用户头像
小鹿
回帖223
粉丝293
关注
邀您回答
换一批
50数字商品服务怎么在无账号登陆的单机应用内使用应用内购买的校验
10DevEco Code自动复制的问题
@State 状态更新规则
这灵动岛有问题
地图调用收费问题
热门标签
1

HarmonyOS 5

2

HarmonyOS 6

3

DevEco Studio

4

UI

5

HarmonyOS

6

ArkUI (方舟UI框架)

7

App开发

8

Ability框架

9

应用媒体

了解社区公约,与您携手共创和谐专业的开发者社区。
在 App 中查看