HarmonyOS 鸿蒙Next中Navigation的menus

HarmonyOS 鸿蒙Next中Navigation的menus 明明画的是透明背景,但是在menus中作为icon使用时却把它填充了,有没有不需要重写的改法,希望使用原生的属性完成设置

cke_682.png

cke_922.png

@Component
export default struct ListTemplate
{
  @State pageTitle: string = ''
  @Consume pageInfo: NavPathStack
  private menu: NavigationMenuItem[] = [
    {
      value: '重命名',
      icon: $r('app.media.Pen')
    },
    {
      value: '删除',
      icon: $r('app.media.Bin')
    }
  ]

  build()
  {
    NavDestination()
    {

    }.title(this.pageTitle)
    .menus(this.menu)
    .onReady((context: NavDestinationContext) => {
      this.pageTitle = context.pathInfo.param as string
    })
  }
}

更多关于HarmonyOS 鸿蒙Next中Navigation的menus的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

这边使用提供的代码,测试没有复现所述情况,考虑可能是icon图标文件的问题,有劳确认下。这边使用的是HarmonyOS图标库下载的图标:https://developer.huawei.com/consumer/cn/design/harmonyos-icon/

更多关于HarmonyOS 鸿蒙Next中Navigation的menus的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如果图标没有问题那就在菜单项配置中强制清除颜色滤镜:

private menu: NavigationMenuItem[] = [

  {

    value: '重命名',

    icon: $r('app.media.Pen').createPixelMap().then(pixelMap => {

      Image(pixelMap).colorFilter(undefined)

    })

  },

  {

    value: '删除',

    icon: $r('app.media.Bin').createPixelMap().then(pixelMap => {

      Image(pixelMap).colorFilter(undefined)

    })

  }

]

图片换成png试试,或在其它的图片浏览软件中看看,是否为透明。

鸿蒙Next中Navigation的menus属性用于定义导航栏右侧的菜单项。通过menus参数配置菜单选项,支持文本和图标组合。菜单项点击事件通过onClick回调处理。该属性遵循鸿蒙声明式开发范式,使用组件化方式构建,与整体导航结构无缝集成。菜单样式和交互行为遵循鸿蒙设计规范。

在HarmonyOS Next的Navigation组件中,menus默认会对icon进行主题适配,包括背景填充。这是系统设计行为,目的是保持视觉一致性。

可以通过以下原生方式解决:

  1. 使用icon属性时,确保图片资源本身是透明背景且不含多余空白区域
  2. 检查图片资源的实际尺寸,系统可能会根据容器自动调整
  3. 确认图片格式支持透明度(如PNG)

目前没有直接禁用填充的原生属性。如果问题仍然存在,建议检查图片资源的具体绘制内容,确保透明度信息正确保留。

回到顶部