尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

HarmonyOS7 可交互浮层选择器:PopupInteractiveSelector

HarmonyOS7 可交互浮层选择器:PopupInteractiveSelector 文章目录前言交互效果完整代码关键代码讲解1. 结果状态回写到主页面2. tagItem() 把重复菜单项封装了起来3. Popup 很适合这种“点完即走”的交互使用建议总结前言很多人刚接触Popup时会默认把它理解成“只能看、不能点”的提示层。其实并不是。只要内容规模合适Popup 完全可以承载简单交互比如菜单选择、标签切换、快速筛选、局部操作等。这个案例就展示了一个非常实用的形态点击按钮后弹出标签菜单用户在浮层内完成选择结果立刻回写到主界面。交互效果页面会先显示“当前标签”初始值为“未选择”。点击“选择标签”按钮后底部弹出一个带颜色标识的标签列表。用户点选其中任意一项后主页面的标签文字立即更新Popup 自动关闭这就是一个完整的“轻量交互浮层”闭环。完整代码import{DEMO_CARD_COLOR,DEMO_THEME_COLOR}from./typesEntryComponentstruct PopupInteractiveSelector{StateisShow:booleantrueStateshowMenuPopup:booleanfalseStateselectedTag:string未选择build(){Column(){if(this.isShow){Column(){Text(Popup 交互).fontSize(16).fontWeight(FontWeight.Bold).margin({bottom:16})Row(){Text(当前标签).fontSize(14).fontColor(#666666)Text(this.selectedTag).fontSize(14).fontColor(DEMO_THEME_COLOR).fontWeight(FontWeight.Bold)}.margin({bottom:20})Button(选择标签).width(100%).height(48).backgroundColor(#4ECDC4).borderRadius(12).fontColor(#FFFFFF).fontSize(16).bindPopup(this.showMenuPopup,{builder:this.menuPopupBuilder,placement:Placement.Bottom,enableArrow:true,onStateChange:(e){if(!e.isVisible){this.showMenuPopupfalse}}}).onClick((){this.showMenuPopup!this.showMenuPopup})}.width(100%).padding(24).backgroundColor(DEMO_CARD_COLOR).borderRadius(12)}}.width(100%).height(100%).backgroundColor(#F5F6FA).padding(16)}BuildermenuPopupBuilder(){Column(){this.tagItem(技术,#4D96FF)this.tagItem(设计,#9B59B6)this.tagItem(产品,#FF6B6B)this.tagItem(市场,#6BCB77)this.tagItem(运营,#FFA500)}.padding(8).backgroundColor(#FFFFFF).borderRadius(12).shadow({radius:12,color:#00000015})}BuildertagItem(label:string,color:string){Row(){Row(){Circle({width:8,height:8}).fill(color)Text(label).fontSize(14).fontColor(#333333).margin({left:8})}Text().layoutWeight(1)}.width(100%).padding({left:12,right:12,top:10,bottom:10}).borderRadius(6).onClick((){this.selectedTaglabelthis.showMenuPopupfalse})}}关键代码讲解1. 结果状态回写到主页面案例里最关键的状态是StateselectedTag:string未选择Popup 中的每一项被点击后都会把标签写回这个状态this.selectedTaglabelthis.showMenuPopupfalse这就让浮层不再只是展示层而是变成了一个真正参与业务状态更新的交互部件。2.tagItem()把重复菜单项封装了起来每个标签项结构几乎一致一个颜色圆点一个标签名一个点击事件把它抽成tagItem()能让主 Builder 更清爽也方便后续扩展选中态、悬停态或图标样式。3. Popup 很适合这种“点完即走”的交互为什么这个案例适合用 Popup而不是 Dialog因为它的交互非常短打开选择关闭整个过程不需要额外确认也不需要复杂表单。像这种轻量级选择器用 Popup 会比弹窗更顺手也更贴近组件上下文。使用建议Popup 交互适合以下类型任务标签选择轻量筛选项切换附近菜单操作局部状态变更如果交互过程需要多步确认、输入内容或复杂校验就别继续使用 Popup应切换到对话框或独立面板。总结这个案例很好地说明了Popup 不只是展示说明也可以承载简单而高频的局部交互。只要你控制好内容规模和操作链路它会成为非常高效的一种界面组织方式。
返回列表