基础ArkTS组件:导航栏组件(HarmonyOS学习第三课【3.8】)

官方文献

Navigation 组件一般作为页面布局的根容器,它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。 Navigation 除了提供了默认的展示样式属性外,它还提供了 CustomBuilder 模式来自定义展示样式

说明

该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

可以包含子组件。从API Version 9开始,推荐与NavRouter组件搭配使用。

接口

Navigation()

属性

除支持通用属性外,还支持以下属性:

名称

参数类型

描述

title

string | CustomBuilder8+ | NavigationCommonTitle9+ | NavigationCustomTitle9+

页面标题。

subTitledeprecated

string

页面副标题。从API Version 9开始废弃,建议使用title代替。

menus

Array<NavigationMenuItem> | CustomBuilder8+

页面右上角菜单。使用Array<NavigationMenuItem> 写法时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。

titleMode

NavigationTitleMode

页面标题栏显示模式。

默认值:NavigationTitleMode.Free

toolBar

object | CustomBuilder8+

设置工具栏内容。

items: 工具栏所有项。

说明:

items均分底部工具栏,在每个均分内容区布局文本和图标,文本超长时,逐级缩小,缩小之后换行,最后...截断。

hideToolBar

boolean

隐藏工具栏。

默认值:false

true: 隐藏工具栏。

false: 显示工具栏。

hideTitleBar

boolean

隐藏标题栏。

默认值:false

true: 隐藏标题栏。

false: 显示标题栏。

hideBackButton

boolean

隐藏返回键。不支持隐藏NavDestination组件标题栏中的返回图标。

默认值:false

true: 隐藏返回键。

false: 显示返回键。

说明:

返回键仅针对titleMode为NavigationTitleMode.Mini时才生效。

navBarWidth9+

Length

导航栏宽度。

默认值:200vp

单位:vp

说明:

仅在Navigation组件分栏时生效。

navBarPosition9+

NavBarPosition

导航栏位置。

默认值:NavBarPosition.Start

说明:

仅在Navigation组件分栏时生效。

mode9+

NavigationMode

导航栏的显示模式。

默认值:NavigationMode.Auto

自适应:基于组件宽度自适应单栏和双栏。

backButtonIcon9+

string | PixelMap | Resource

设置导航栏返回图标。不支持隐藏NavDestination组件标题栏中的返回图标。

hideNavBar9+

boolean

是否显示导航栏(仅在mode为NavigationMode.Split时生效)。

NavigationMenuItem类型说明

名称

类型

必填

描述

value

string

菜单栏单个选项的显示文本。

icon

string

菜单栏单个选项的图标资源路径。

action

() => void

当前选项被选中的事件回调。

object类型说明

名称

类型

必填

描述

value

string

工具栏单个选项的显示文本。

icon

string

工具栏单个选项的图标资源路径。

action

() => void

当前选项被选中的事件回调。

NavigationTitleMode枚举说明

名称

描述

Free

当内容为可滚动组件时,标题随着内容向上滚动而缩小(子标题的大小不变、淡出)。向下滚动内容到顶时则恢复原样。

Mini

固定为小标题模式。

Full

固定为大标题模式。

NavigationCommonTitle类型说明

名称

类型

必填

描述

main

string

设置主标题。

sub

string

设置副标题。

NavigationCustomTitle类型说明

名称

类型

必填

描述

builder

CustomBuilder

设置标题栏内容。

height

TitleHeight | Length

设置标题栏高度。

NavBarPosition枚举说明

名称

描述

Start

双栏显示时,主列在主轴方向首部。

End

双栏显示时,主列在主轴方向尾部。

NavigationMode枚举说明

名称

描述

Stack

导航栏与内容区独立显示,相当于两个页面。

Split

导航栏与内容区分两栏显示。

Auto

窗口宽度>=520vp时,采用Split模式显示;窗口宽度<520vp时,采用Stack模式显示。

TitleHeight枚举说明

名称

描述

MainOnly

只有主标题时标题栏的推荐高度(56vp)。

MainWithSub

同时有主标题和副标题时标题栏的推荐高度(82vp)。

说明

目前可滚动组件只支持List。

事件

名称

功能描述

onTitleModeChange(callback: (titleMode: NavigationTitleMode) => void)

当titleMode为NavigationTitleMode.Free时,随着可滚动组件的滑动标题栏模式发生变化时触发此回调。

onNavBarStateChange(callback: (isVisible: boolean) => void)

导航栏显示状态切换时触发该回调。返回值isVisible为true时表示显示,为false时表示隐藏。

 内容比较多我将用简单易懂的话来进行说明,并且精炼其中内容。

Navigation定义介绍

interface NavigationInterface {(): NavigationAttribute;
}
Mini模式

普通型标题栏,用于一级页面不需要突出标题的场景。

Navigation 的定义不需要传递相关参数,我们先看下 Navigation 的最简单样例:

                                 

代码示例:

@Entry
@Component
struct Index {build() {Navigation() {              // Navigation只能包含一个子组件Text('title').textAlign(TextAlign.Center).fontSize(30).width('100%').height('100%').backgroundColor('#aabbcc')}.size({width: '100%', height: '100%'}) // Navigation只设置了size,没有设置任何其它属性.titleMode(NavigationTitleMode.Mini)   //设置标题模式.title('主标题')   }
}
Full模式

强调型标题栏,用于一级页面需要突出标题的场景

                             

 代码示例:

@Entry
@Component
struct Index {build() {Navigation() {              // Navigation只能包含一个子组件Text('title').textAlign(TextAlign.Center).fontSize(30).width('100%').height('100%').backgroundColor('#aabbcc')}.size({width: '100%', height: '100%'}) // Navigation只设置了size,没有设置任何其它属性.titleMode(NavigationTitleMode.Full)   //设置标题模式.title('主标题')   }
}

Navigation属性介绍

declare class NavigationAttribute extends CommonMethod<NavigationAttribute> {title(value: string | CustomBuilder): NavigationAttribute;subTitle(value: string): NavigationAttribute;hideTitleBar(value: boolean): NavigationAttribute;hideBackButton(value: boolean): NavigationAttribute;titleMode(value: NavigationTitleMode): NavigationAttribute;menus(value: Array<NavigationMenuItem> | CustomBuilder): NavigationAttribute;toolBar(value: object | CustomBuilder): NavigationAttribute;hideToolBar(value: boolean): NavigationAttribute;onTitleModeChange(callback: (titleMode: NavigationTitleMode) => void): NavigationAttribute;
}

title:设置导航栏的标题

当参数类型为 string 时,可以直接设置标题,但样式不支修改;当参数为 CustomBuilder 时,可以自定义标题样式。

  • 参数类型为 string ,简单样例如下所示:

    @Entry
    @Component
    struct Index {build() {Navigation() {              // Navigation只能包含一个子组件Text('title').textAlign(TextAlign.Center).fontSize(30).width('100%').height('100%').backgroundColor('#aabbcc')}.size({width: '100%', height: '100%'}) // Navigation只设置了size,没有设置任何其它属性.titleMode(NavigationTitleMode.Full)//设置标题模式.title('主标题')     //标题栏内容}
    }
    

    样例运行结果如下图所示:                                                              

  • 参数类型为 CustomBuilder ,简单样例如下所示:

    @Entry
    @Component
    struct ComponentTest {@Builder title() { // 通过Builder自定义标题栏,可以灵活的设置标题样式Row() {Text('Builder标题').fontSize(20)}.width('100%').height(55).backgroundColor(Color.Pink)}build() {Navigation() {Text('title').textAlign(TextAlign.Center).fontSize(30).size({ width: '100%', height: '100%' }).backgroundColor('#aabbcc')}.size({ width: '100%', height: '100%' }).title(this.title()) // 使用自定义的标题栏.titleMode(NavigationTitleMode.Mini)//设置标题模式}
    }
    

    样例运行结果如下图所示:

subTitle:设置页面的副标题

  • 简单样例如下所示:

    @Entry
    @Component
    struct ComponentTest {@Builder title() { // 通过Builder自定义标题栏,可以灵活的设置标题样式Row() {Text('Builder标题').fontSize(20)}.width('100%').height(55).backgroundColor(Color.Pink)}build() {Navigation() {Text('title').textAlign(TextAlign.Center).fontSize(30).size({ width: '100%', height: '100%' }).backgroundColor('#aabbcc')}.size({ width: '100%', height: '100%' }).title(this.title()) // 使用自定义的标题栏.subTitle("副标题").titleMode(NavigationTitleMode.Mini)//设置标题模式}
    }

    样例运行结果如下图所示:

hideBackButton:是否隐藏返回按钮

  • 默认情况下不隐藏,简单样例如下所示:

    @Entry
    @Component
    struct ComponentTest {@Builder title() { // 通过Builder自定义标题栏,可以灵活的设置标题样式Row() {Text('Builder标题').fontSize(20)}.width('100%').height(55).backgroundColor(Color.Pink)}build() {Navigation() {Text('title').textAlign(TextAlign.Center).fontSize(30).size({ width: '100%', height: '100%' }).backgroundColor('#aabbcc')}.size({ width: '100%', height: '100%' }).title(this.title()) // 使用自定义的标题栏.subTitle("副标题").titleMode(NavigationTitleMode.Mini)//设置标题模式.hideBackButton(true)}
    }

    样例运行结果如下图所示:

toolBar:设置工具栏

  • 当参数类型为 object 时,可以直接设置工具栏选项,但样式不支修改;当参数为 CustomBuilder 时,可以自定义标题栏。

    • 当参数为 object 类型时,参数需要按照如下格式定义:

      • value:工具栏单个选项的显示文本。
      • icon:工具栏单个选项的图标资源路径。
      • action:当前选项被选中时的事件回调。
@Entry
@Component
struct Index {build() {Navigation() {              // Navigation只能包含一个子组件Text('title').textAlign(TextAlign.Center).fontSize(30).width('100%').height('100%').backgroundColor('#aabbcc')}.size({width: '100%', height: '100%'}) // Navigation只设置了size,没有设置任何其它属性.titleMode(NavigationTitleMode.Mini)//设置标题模式.title('主标题')     //标题栏内容.toolBar({items:[{value: "func", icon: "./icon/ic_public_community_messages.png", action: ()=>{}},{value: "func", icon: "../../resources/base/media/icon.png", action: ()=>{}},{value: "func", icon: $r("app.media.icon"), action: ()=>{}}]})}
}

当参数为 CustomBuilder 类型

可以自定义样式,简单样例如下所示

@Entry
@Component
struct ComponentTest {@State index: number = 0; // 选项卡下标,默认为第一个@Builder toolbar() { // 通过builder自定义toolbarRow() {Column() {Image(this.index == 0 ? 'pages/icon_message_selected.png' : 'pages/icon_message_normal.png').size({ width: 25, height: 25 })Text('消息').fontSize(16).fontColor(this.index == 0 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 0;})Column() {Image(this.index == 1 ? 'pages/icon_contract_selected.png' : 'pages/icon_contract_normal.png').size({ width: 25, height: 25 })Text('联系人').fontSize(16).fontColor(this.index == 1 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 1;})Column() {Image(this.index == 2 ? 'pages/icon_dynamic_selected.png' : 'pages/icon_dynamic_normal.png').size({ width: 25, height: 25 })Text('动态').fontSize(16).fontColor(this.index == 2 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 2;})}.width('100%').height(60)}build() {Navigation() {Text(this.index == 0 ? "消息" : this.index == 1 ? "联系人" : "动态").textAlign(TextAlign.Center).fontSize(30).size({ width: '100%', height: '100%' }).backgroundColor('#aabbcc')}.size({ width: '100%', height: '100%' }).title("标题栏").toolBar(this.toolbar())}
}

hideTitleBarhideToolBar

设置是否显示或者隐藏标题栏、工具栏,简单样例如下所示:

@Entry
@Component
struct ComponentTest {@State index: number = 0;@State hideToolBar: boolean = false;@State hideTitleBar: boolean = false;@Builder toolbar() {Row() {Column() {Image(this.index == 0 ? 'pages/icon_message_selected.png' : 'pages/icon_message_normal.png').size({ width: 25, height: 25 })Text('消息').fontSize(16).fontColor(this.index == 0 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 0;})Column() {Image(this.index == 1 ? 'pages/icon_contract_selected.png' : 'pages/icon_contract_normal.png').size({ width: 25, height: 25 })Text('联系人').fontSize(16).fontColor(this.index == 1 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 1;})Column() {Image(this.index == 2 ? 'pages/icon_dynamic_selected.png' : 'pages/icon_dynamic_normal.png').size({ width: 25, height: 25 })Text('动态').fontSize(16).fontColor(this.index == 2 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 2;})}.width('100%').height(60)}build() {Navigation() {Column({ space: 10 }) {Text(this.index == 0 ? "消息" : this.index == 1 ? "联系人" : "动态").textAlign(TextAlign.Center).fontSize(30)Button(this.hideTitleBar ? "显示TitleBar" : "隐藏TitleBar").onClick(() => {this.hideTitleBar = !this.hideTitleBar;})Button(this.hideToolBar ? "显示ToolBar" : "隐藏ToolBar").onClick(() => {this.hideToolBar = !this.hideToolBar;})}.backgroundColor('#aabbcc').size({ width: '100%', height: '100%' })}.size({ width: '100%', height: '100%' }).title("标题栏").toolBar(this.toolbar()).hideToolBar(this.hideToolBar).hideTitleBar(this.hideTitleBar)}
}

 

设置菜单栏

菜单栏位于Navigation组件的右上角,开发者可以通过menus属性进行设置。menus支持Array<NavigationMenuItem>和CustomBuilder两种参数类型。使用Array<NavigationMenuItem>类型时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。

menus:设置标题栏右上角的菜单项,当参数为 CustomBuilder 时可以自定义菜单项。

  • 当参数为 NavigationMenuItem 数组时,参数说明如下:

    • value:菜单项的显示文本。
    • icon:菜单项的显示图标路径。
    • action:点击菜单项的事件回调。

简单样例如下所示:

@Entry
@Component
struct ComponentTest {@State index: number = 0;@State hideToolBar: boolean = false;@State hideTitleBar: boolean = false;@Builder toolbar() {Row() {Column() {Image(this.index == 0 ? 'pages/icon_message_selected.png' : 'pages/icon_message_normal.png').size({ width: 25, height: 25 })Text('消息').fontSize(16).fontColor(this.index == 0 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 0;})Column() {Image(this.index == 1 ? 'pages/icon_contract_selected.png' : 'pages/icon_contract_normal.png').size({ width: 25, height: 25 })Text('联系人').fontSize(16).fontColor(this.index == 1 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 1;})Column() {Image(this.index == 2 ? 'pages/icon_dynamic_selected.png' : 'pages/icon_dynamic_normal.png').size({ width: 25, height: 25 })Text('动态').fontSize(16).fontColor(this.index == 2 ? "#2a58d0" : "#6b6b6b")}.alignItems(HorizontalAlign.Center).height('100%').layoutWeight(1).onClick(() => {this.index = 2;})}.width('100%').height(60)}build() {Navigation() {Column({ space: 10 }) {Text(this.index == 0 ? "消息" : this.index == 1 ? "联系人" : "动态").textAlign(TextAlign.Center).fontSize(30)Button(this.hideTitleBar ? "显示TitleBar" : "隐藏TitleBar").onClick(() => {this.hideTitleBar = !this.hideTitleBar;})Button(this.hideToolBar ? "显示ToolBar" : "隐藏ToolBar").onClick(() => {this.hideToolBar = !this.hideToolBar;})}.backgroundColor('#aabbcc').size({ width: '100%', height: '100%' })}.size({ width: '100%', height: '100%' }).title("标题栏").toolBar(this.toolbar()).hideToolBar(this.hideToolBar).hideTitleBar(this.hideTitleBar).menus([{value: "搜索",icon: "pages/icon_search.png",action: () => {Prompt.showToast({ message: "搜索" })}},{value: "扫码",icon: "pages/icon_scan.png",action: () => {Prompt.showToast({ message: "扫码" })}}])}
}

 

Navigation事件介绍

declare class NavigationAttribute extends CommonMethod<NavigationAttribute> {onTitleModeChange(callback: (titleMode: NavigationTitleMode) => void): NavigationAttribute;
}
  • onTitleModeChange:当 titleMode 为 NavigationTitleMode.Free 时,随着可滚动组件的滑动标题栏模式发生变化时触发此回调

NavRouter

分享

添加收藏

导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。

说明

该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

必须包含两个子组件,其中第二个子组件必须为NavDestination。

说明

子组件个数异常时:

  1. 有且仅有1个时,触发路由到NavDestination的能力失效。
  2. 有且仅有1个时,且使用NavDestination场景下,不进行路由。
  3. 大于2个时,后续的子组件不显示。
  4. 第二个子组件不为NavDestination时,触发路由功能失效。

接口

NavRouter()

事件

名称

功能描述

onStateChange(callback: (isActivated: boolean) => void)

组件激活状态切换时触发该回调。返回值isActivated为true时表示激活,为false时表示未激活。

说明:

开发者点击激活NavRouter,加载对应的NavDestination子组件时,回调onStateChange(true)。NavRouter对应的NavDestination子组件不再显示时,回调onStateChange(false)。

示例

// xxx.ets
@Entry
@Component
struct NavRouterExample {@State isActiveWLAN: boolean = false@State isActiveBluetooth: boolean = falsebuild() {Column() {Navigation() {NavRouter() {Row() {Row().width(30).height(30).borderRadius(30).margin({ left: 3, right: 10 }).backgroundColor(Color.Pink)Text(`WLAN`).fontSize(22).fontWeight(500).textAlign(TextAlign.Center)}.width('90%').height(72)NavDestination() {Flex({ direction: FlexDirection.Row }) {Text('未找到可用WLAN').fontSize(30).padding({ left: 15 })}}.hideTitleBar(false).backgroundColor('#0c182431')}.backgroundColor(this.isActiveWLAN ? '#ccc' : '#fff').borderRadius(24).onStateChange((isActivated: boolean) => {this.isActiveWLAN = isActivated})NavRouter() {Row() {Row().width(30).height(30).borderRadius(30).margin({ left: 3, right: 10 }).backgroundColor(Color.Pink)Text(`蓝牙`).fontSize(22).fontWeight(500).textAlign(TextAlign.Center)}.width('90%').height(72)NavDestination() {Flex({ direction: FlexDirection.Row }) {Text('未找到可用蓝牙').fontSize(30).padding({ left: 15 })}}.hideTitleBar(false).backgroundColor('#0c182431')}.backgroundColor(this.isActiveBluetooth ? '#ccc' : '#fff').borderRadius(24).onStateChange((isActivated: boolean) => {this.isActiveBluetooth = isActivated})}.title('设置').titleMode(NavigationTitleMode.Free).mode(NavigationMode.Auto).hideTitleBar(false).hideToolBar(true)}.height('100%')}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OCR技术在历史文献数字化中的革命性作用

随着数字化技术的不断发展&#xff0c;历史文献的数字化已成为保存和传播文化遗产的重要途径。其中&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术在历史文献数字化中发挥了革命性的作用&#xff0c;为研究者提供了更广阔的研究空间&#xff0c;推动了历史学研究的发…

kafka安装及收发消息

kafka需要与zookeeper配合使用&#xff0c;但是从2.8版本kafka引入kraft&#xff0c;也就是说在2.8后&#xff0c;zookeeper和kraft都可以管理kafka集群&#xff0c;这里我们依然采用zookeeper来配合kafka。 1、首先我们下载zookeeper 下载地址为 https://zookeeper.apache.org…

三. TensorRT基础入门-剖析ONNX架构并理解ProtoBuf

目录 前言0. 简述1. 执行一下我们的python程序2. ONNX是什么&#xff1f;3. onnx中的各类Proto3.1 理解onnx中的ValueInfoProto3.2 理解onnx中的TensorProto3.3 理解onnx中的NodeProto3.4 理解onnx中的AttributeProto3.5 理解onnx中的GraphProto3.6 理解onnx中的ModelProto 4. …

算法提高之单词接龙

算法提高之单词接龙 核心思想&#xff1a;dfs 预处理每两个字符串之间最短的公共部分长度 求最短公共 最终字符串是最长 dfs所有开头字符串 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 25;int g[N][N…

Feign 和 OpenFeign 的区别

Feign 和 OpenFeign 都是用来进行服务间调用的客户端库&#xff0c;它们旨在简化HTTP API客户端的编写过程&#xff0c;使得编写对外部服务的接口就像调用本地方法一样简单。尽管它们有相似之处&#xff0c;但也存在一些关键差异&#xff1a; 归属和演进&#xff1a; Feign 最初…

大规模 RGB LED灯控系统 Lumos:创新与智能化的融合

灯控系统&#xff1a;创新与智能化的融合 在现代照明技术不断进步的背景下&#xff0c;灯控系统的应用已经从简单的开关控制&#xff0c;发展到能够进行复杂程控操作的智能化管理。我们推出的新一代灯控解决方案&#xff0c;凭借其高度的可配置性和跨平台兼容性&#xff0c;已…

虚拟化数据恢复—误还原虚拟机快照怎么办?怎么恢复最新虚拟机数据?

虚拟化技术原理是将硬件虚拟化给不同的虚拟机使用&#xff0c;利用虚拟化技术可以在一台物理机上安装多台虚拟机。误操作或者物理机器出现故障都会导致虚拟机不可用&#xff0c;虚拟机中的数据丢失。 虚拟化数据恢复环境&#xff1a; 有一台虚拟机是由物理机迁移到ESXI上面的&a…

pikachu靶场(xss通关教程)

&#xff08;注&#xff1a;若复制注入代码攻击无效&#xff0c;请手动输入注入语句&#xff0c;在英文输入法下&#xff09; 反射型xss(get型) 1.打开网站 发现有个框&#xff0c;然后我们在框中输入一个“1”进行测试&#xff0c; 可以看到提交的数据在url处有显示&#xf…

Debian Linux 下给Nginx 1.26.0 编译增加Brotli算法支持

明月发现参考【给Nginx添加谷歌Brotli压缩算法支持】一文给出的方法&#xff0c;在Debian Linux 12.5下就一直编译失败&#xff0c;主要的错误是因为文件缺失&#xff0c;在专门又安装了apt-get install libbrotli-dev的依赖库后依然会因为文件缺失无法编译完成&#xff0c;就这…

ERP与MES与WMS集成

WMS储位管理 WMS与MES集成 (一) 打通追溯链 在拣货时&#xff0c;将配料标签与供应商的物料标签进行关联。通过配料标签达到精确追溯及防错目的。针对模糊查询&#xff0c;将工单与物料的供应商信息、仓库流转信息进行关联。 (二) WMS入库 成品(半成品)下线后&#xff0c;M…

draw.text((left, top - 15), text,font=font, fill=“green”)

这是一个Python PIL库中的方法&#xff0c;用于在图片上绘制文本。具体来说&#xff0c;它可以在指定的位置绘制指定的文本&#xff0c;并使用指定的字体、颜色等参数进行渲染。其中&#xff0c;left和top是文本绘制的左上角坐标&#xff0c;text是要绘制的文本内容&#xff0c…

齿轮滚刀刃口钝化技术简介

介绍 在滚刀的使用中发现&#xff0c;进口滚刀和国产滚刀在加工质量和寿命方面存在显著差异。经过多次比较得知&#xff0c;滚刀的使用寿命可以达到国产滚刀的两倍以上&#xff0c;而进口滚刀返回原厂磨削后的使用寿命约为新刀具的90% &#xff0c;但同样经过国内厂家磨削后&a…

【C语言项目】贪吃蛇(下)

个人主页~ 源码在Gitee仓库~ 上一篇贪吃蛇&#xff08;上&#xff09;~ 贪吃蛇 四、核心的实现游戏测试1、GameStart&#xff08;1&#xff09;控制台窗口大小和名字设置&#xff08;2&#xff09;光标隐藏&#xff08;3&#xff09;打印欢迎界面&#xff08;4&#xff09;创建…

azkaban-tools 项目介绍

本文背景 应一个用户的好心和好奇心&#xff0c;在最近水深火热的百忙之中抽时间写完了一个简短的项目介绍&#xff0c;其实就是几个azkaban的批量操作脚本&#xff0c;但在大数据集群的“运维生涯”中&#xff0c;还是帮了自己不少忙&#xff0c;也算是为了它做一个简单的回顾…

Java | Leetcode Java题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int maximalRectangle(char[][] matrix) {int m matrix.length;if (m 0) {return 0;}int n matrix[0].length;int[][] left new int[m][n];for (int i 0; i < m; i) {for (int j 0; j < n; j) {if (mat…

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

这篇文章主要介绍了Python3 Appium 安卓模拟器实现APP自动化测试并生成测试报告,本文给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下 本文主要分为以下几个部分 安装Python3 安装Python3的Appium库 安装Andr…

Mp3tag for Mac:音乐标签,轻松管理

还在为杂乱无章的音乐文件而烦恼吗&#xff1f;Mp3tag for Mac&#xff0c;让您的音乐库焕然一新&#xff01;它支持多种音频格式&#xff0c;批量编辑标签&#xff0c;让音乐管理变得简单高效。同时&#xff0c;自动获取在线数据库的音乐元数据&#xff0c;确保您的音乐库始终…

kafka安装配置及集成springboot

1. 安装 单机安装kafka Kafka对于zookeeper是强依赖&#xff0c;保存kafka相关的节点数据&#xff0c;所以安装Kafka之前必须先安装zookeeper dockerhub网址: https://hub.docker.com Docker安装zookeeper 下载镜像&#xff1a; docker pull zookeeper:3.4.14创建容器 doc…

docker(五):DockerFile

文章目录 DockerFile1、Dockerfile构建过程解析2、DockerFile常用保留字命令FROMMAINTAINERRUNEXPOSEWORKDIRUSERENVADDCOPYVOLUMECMDENTRYPOINT总结 3、案例 DockerFile 1、Dockerfile构建过程解析 官网文档&#xff1a;https://docs.docker.com/reference/dockerfile/ Dock…

【论文阅读笔记】HermesSim(Code is not Natural Language) (Security 24)

个人博客地址 HermesSim [Security 24] 论文&#xff1a;《Code is not Natural Language: Unlock the Power of Semantics-Oriented Graph Representation for Binary Code Similarity Detection》 仓库&#xff1a;https://github.com/NSSL-SJTU/HermesSim 提出的问题 二…