当前位置: 首页 > article >正文

鸿蒙开发:自制原生下拉框

最近一个项目需求,要求实现下拉框设计。跑鸿蒙原生组件挑了半天,发现都不符合甲方要求。无奈啊,只能自己自制,以下是基本代码,如有更好设计,欢迎指正!

整体思路就是当鼠标进入选中项1范围时,选中项2+下拉框出现,同时选中项1消失;当选择下拉框选项或鼠标移出选中项2+下拉框范围后,选中项2+下拉框消失,同时选中项1出现。

下拉菜单箭头

/**
 * 下拉菜单箭头
 * @param src:图片路径
 * @param x:左边距
 * @param y:上边距
 * @param width:宽
 * @param height:高
 */
@Builder
function ImageBuilder(src: string,x: number, y: number, width: number, height: number) {
  Image(src)
    .position({x:px2vp(x),y:px2vp(y)})
    .width(px2vp(width))
    .height(px2vp(height))
}

选中项

@Builder
  Title(){
    Text(this.message)
      .position({x:px2vp(45),y:px2vp(20)})
      .width(px2vp(200))
      .height(px2vp(40))
      .fontSize(px2vp(40))
      .fontWeight(400)
      .fontColor('#262B2F')
      .textAlign(TextAlign.Start)
      .fontStyle(FontStyle.Normal)
      .onClick(()=>{
        this.isHover = !this.isHover
      })
  }

下拉框

Flex(){
      if(!this.isHover){
        Row() {
          this.Title()
          ImageBuilder('/pictures/Vector_right.png',276,25,20,30)
        }
        .height(px2vp(80))
        .width(px2vp(330))
        .backgroundColor('#ffbb75ec')
        .borderRadius(px2vp(50))
        .onHover((isHover: boolean)=>{
          console.log('dfgrjwkgwhgop')
          this.isHover = isHover
        })
      }

      if(this.isHover){
        Column() {
          this.Title()
          ImageBuilder('/pictures/Vector_down.png',274,33,30,20)

          Line()
            .position({ x: px2vp(20), y: px2vp(79) })
            .width(px2vp(290))
            .height(px2vp(2))
            .backgroundColor('#9CB6CD')
          List(){
            ForEach(this.devices,(item: string)=>{
              ListItem(){
                Text(item)
                  .width(px2vp(230))
                  .height(px2vp(62))
                  .fontSize(px2vp(40))
                  .fontWeight(400)
                  .fontColor('#262B2F')
                  .textAlign(TextAlign.Start)
                  .fontStyle(FontStyle.Normal)
                  .onClick(()=> {
                    this.isHover = false
                    this.message = item
                  })
              }
            })
          }
          .position({x:px2vp(45),y:px2vp(90)})
          .height(px2vp(600))
        }
        .height(px2vp(650))
        .width(px2vp(330))
        .backgroundColor('#ffbb75ec')
        .borderRadius(px2vp(40))
        .onHover((isHover: boolean)=>{
          this.isHover = isHover
        })
      }
    }
 }

效果图


http://www.kler.cn/news/329578.html

相关文章:

  • 【网络安全 | JAVA代码审计】基础安全问题和解决方法初探
  • 零工市场小程序的未来发展趋势
  • 1-仙灵之谜(区块链游戏详情介绍)
  • Ubuntu 22.04无法连接网络(网络图标丢失)解决方案
  • image离散小波变换及pytorch_wavelets实现
  • Qemu开发ARM篇-7、uboot以及系统网络连接及配置
  • Android Debug Bridge(ADB)完全指南
  • 【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
  • elasticsearch 写入新数据测试(二)
  • 练习题 - DRF 3.x Validators 验证使用示例和配置方法
  • Java中的switch分支结构
  • 解析Vue2源码diff算法更新子节点逻辑以及优化
  • 专访 Bitlayer 联合创始人 Charlie:探索比特币 Layer2 技术的未来
  • 【高阶数据结构】平衡二叉树(AVL)的删除和调整
  • Hadoop三大组件之MapReduce(一)
  • 计算机毕业设计 C语言学习辅导网站的设计与实现 Java实战项目 附源码+文档+视频讲解
  • C#秒如何转为时分秒格式
  • 智能BI项目第六期
  • 亚信安全天穹5分钟勒索体检 免费试用今起上线
  • RabbitMQ高级特性-持久性
  • STM32单片机编程调试常见问题(二) Keil5软件调试中常见的配置问题
  • 【GEE学习第一期】GEE介绍、注册及基本使用
  • Leetcode 3301. Maximize the Total Height of Unique Towers
  • Spring Boot技术栈:打造高效在线商城
  • 【经典机器学习算法】谱聚类算法及其实现(python)
  • 【DirectX sdk 学习使用】
  • DRF笔记
  • Qt --- 常用控件的介绍---Widget属性介绍
  • 如何隐藏Windows10「安全删除硬件」里的USB无线网卡
  • 计算机毕业设计 智能旅游推荐平台的设计与实现 Java实战项目 附源码+文档+视频讲解