【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)
【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下)
【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)
【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)


文章目录

  • 系列文章目录
  • 前言
  • 一、常见布局详细使用
    • (4)相对布局(RelativeContainer)
      • 1、基本概念:
      • 2、语法提炼:
      • 3、 对齐方式
        • 水平方向:
        • 垂直方向
      • 4、 使用示例
        • 示例1:
        • 示例2:
        • 示例3:
        • 示例4:
        • 示例5:
    • (5)相对布局2(offset)
      • 示例
      • 示例1:
      • 示例2:
    • (6)绝对布局(position)
      • 示例1:
      • 示例2:
      • 示例3:
      • 示例4:
      • 示例5:
  • 二、布局中的渲染控制
    • 1. if/else
    • 2. ForEach
      • 示例1:
      • 示例2:
  • 三、项目开发过程中布局像素单位的选择
    • 1、像素单位介绍
      • px
      • vp
      • fp
      • lpx
    • 2、像素单位之间的转换
    • 3、实际开发单位的选择
      • lpx基准宽(designWidth)设置:
  • 四、结束


前言

HarmonyOS NEXT(鸿蒙应用)开发快速入门教程之布局篇(下),基于HarmonyOS NEXT Beta1版本(api 12)讲解。

本文将从前端开发者角度来学习鸿蒙的布局语法,通过类比鸿蒙布局和web css布局相似之处,帮助大家快速掌握鸿蒙布局开发。


一、常见布局详细使用

(4)相对布局(RelativeContainer)

此相对布局非css里面的相对布局而是安卓里面的相对布局,对于web开发人员来说比较新的一种布局方式,而对于安卓开发来说就非常熟悉,css相对布局在鸿蒙里面也有类似用法后续会讲到。

RelativeContainer为采用相对布局的容器,支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。

通俗介绍说就是子元素放置位置既可以设置相对父容器,也可以设置相对兄弟组件,相对父元素就可以看做在一个密闭长方形空间你想把东西放置它的上下左右某个对齐方向上,相对兄弟组件可以看成两个盒子,让盒子上面对齐排列或者盒子上和另一个盒子下对齐,左对齐或者左与右对齐确定子元素位置。所以这边相对的是其他组件而css的相对的是自己,因此必须设置相对的元素,这个元素称为锚点。

1、基本概念:

锚点:通过锚点设置当前元素基于哪个元素确定位置。
对齐方式:通过对齐方式,设置当前元素是基于锚点的上中下对齐,还是基于锚点的左中右对齐。

2、语法提炼:

RelativeContainer() {子组件().alignRules({方向(left或right或top或bottom):{anchor:锚点ID,align:对齐枚举值},方向(left或right或top或bottom):{anchor:锚点ID,align:对齐枚举值},....})
}

一般设置2个方向就能确定位置了,比如left+top,如果子组件未设置高度或宽度的,也可以通过设置3个以上方向让子组件拉伸填满父组件宽度或高度。

为了明确定义锚点,必须为RelativeContainer及其子元素设置ID,RelativeContainer不设置默认id为“ __ container __ ”,其余子元素的ID通过id属性设置。不设置id的组件能显示,但是不能被其他子组件作为锚点

3、 对齐方式

align值对应枚举值

水平方向:

HorizontalAlign.Start 左
HorizontalAlign.Center 中
align:HorizontalAlign.End 右

垂直方向

VerticalAlign.Top 上
VerticalAlign.Center 中
VerticalAlign.Bottom 下

4、 使用示例

示例1:
@Entry
@Component
struct Index {build() {RelativeContainer() {Button('按钮').alignRules({left: { anchor: '__container__', align: HorizontalAlign.Start },bottom: { anchor: '__container__', align: VerticalAlign.Bottom } })}.width('100%').height('100%')}
}

说明:按钮水平方向基于父容器左边对齐,垂直方向基于父容器底部对齐

运行效果:
在这里插入图片描述

示例2:
@Entry
@Component
struct Index {build() {RelativeContainer() {Button('按钮').alignRules({right: { anchor: '__container__', align: HorizontalAlign.Center },top: { anchor: '__container__', align: VerticalAlign.Center } }).width(100).height(150)}.width('100%').height('100%')}
}

说明:按钮的右边与父容器水平方向中间对齐,顶部与父容器纵向中间对齐

运行效果:
在这里插入图片描述

示例3:
@Entry
@Component
struct Index {build() {RelativeContainer() {Column() {Text('矩形')}.width(100).height(50).backgroundColor('#ff22f2').margin({top: 80,left: 100}).id('rect')Button('按钮').alignRules({left: { anchor: 'rect', align: HorizontalAlign.End },top: { anchor: 'rect', align: VerticalAlign.Bottom }}).width(100).height(150)}.width('100%').height('100%')}
}

说明:按钮左边与矩形右边对齐,按钮顶部与按钮底部对齐

运行效果:
在这里插入图片描述

示例4:
@Entry
@Component
struct Index {build() {RelativeContainer() {Column() {Text('矩形')}.width(100).height(50).backgroundColor('#ff22f2').margin({top: 80,left: 100}).id('rect')Button('按钮').alignRules({left: { anchor: 'rect', align: HorizontalAlign.End },top: { anchor: 'rect', align: VerticalAlign.Bottom }}).id('button').width(100).height(150)Button('按钮2').alignRules({right: { anchor: 'button', align: HorizontalAlign.Start },top: { anchor: 'button', align: VerticalAlign.Bottom }}).width(100).height(150)}.width('100%').height('100%')}
}

说明:
按钮1左边与矩形右边对齐,按钮1顶部与按钮底部对齐
按钮2右边与按钮1左边对齐,按钮2顶部与按钮1底部对齐

运行效果:
在这里插入图片描述

示例5:
@Entry
@Component
struct Index {build() {RelativeContainer() {Button('按钮').alignRules({right: { anchor: '__container__', align: HorizontalAlign.End },top: { anchor: '__container__', align: VerticalAlign.Top },bottom: { anchor: '__container__', align: VerticalAlign.Bottom },})}}
}说明:通过设置按钮顶部贴父容器顶部,底部贴父容器底部,按钮高度自动填满父元素

运行效果:
在这里插入图片描述

(5)相对布局2(offset)

通用属性offset的作用跟css相对布局是一样的,相对于自身的位置进行偏移,不影响父容器布局。

基本语法:

组件.offset({x:10,y:10})组件.offset({x:-10,y:-10})
组件.offset({x:'10px',y:'10vp'})组件.offset({x:"20%",y:10})

说明:
1、x表示水平方向偏移量,y表示纵向方法偏移量,值单位默认vp,也可以字符串自带单位。
2、x为负值表示向左偏移,正值向右偏移,同理y为负值表示向上偏移,正值向下偏移。
3、值也支持%字符串,百分比相对的是父容器的宽或高,例如x:50%,则组件向右偏移父容器宽度的50%

示例

按钮初始位置在屏幕左上角

@Entry
@Component
struct Index {build() {Column(){Button('按钮')}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

在这里插入图片描述

示例1:

@Entry
@Component
struct Index {build() {Column(){Button('按钮').offset({x:100,y:100})}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:

在这里插入图片描述

示例2:

@Entry
@Component
struct Index {build() {Column(){Button('按钮').offset({x:'50%',y:0})}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:

在这里插入图片描述

(6)绝对布局(position)

通用属性position的作用跟css绝对布局是一样的,子组件相对父容器确定位置,当父容器为Row/Column/Flex时,设置position的子组件不占位,不影响其他兄弟子组件正常布局。

基本语法:

组件.position({x:10,y:10})组件.position({x:-10,y:-10})组件.position({x:"50%",y:"10px"})组件.position({left:10,top:10})
组件.position({right:10,bottom:10})

说明:
1、入参类型既支持Position(x\y)类型也支持Edges(top\bottom\left\right)类型
2、和offset一样值支持字符串单位、百分比、数字类型,默认单位vp,支持正负值。
3、Edges(top\bottom\left\right)类型用法跟css基本一致,top相对父容器顶部距离,bottom相对父容器底部距离,left相对父容器左边距离,right相对父容器右边距离,通过边距来确定组件相对于父组件的位置。只需设置2个方向就能确定位置,比如top+left或者bottom+right,同时设置top和bottom,仅top生效;同时设置left和right,仅left生效
4、Position(x\y)类型的x\y实际等同于Edges left\top,x=left,y=top
5、与css不同的是鸿蒙的绝对布局相对父容器起始位置需要扣去padding部分,相当于ie盒子模型内容部分。

示例1:

@Entry
@Component
struct Index {build() {Column(){Button('按钮').position({x:'0',y:'500px'})}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:

在这里插入图片描述

示例2:

@Entry
@Component
struct Index {build() {Column(){Button('按钮').position({left:0,bottom:-25}).width(100).height(50)}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:
在这里插入图片描述

说明:按钮底部和父容器底部相距-25vp,也即按钮向下平移了25vp等于按钮自身高度一半

示例3:

@Entry
@Component
struct Index {build() {Column(){Button('按钮').position({right:0,bottom:0}).width(100).height(50)}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:
在这里插入图片描述

说明:按钮和父容器右边和底部贴合,距离为0,所以按钮位置在父容器右下角

示例4:

子组件位于父组件水平垂直居中通用方法:

@Entry
@Component
struct Index {build() {Column() {Button('按钮').position({left: '50%',top: '50%'}).translate({x: '-50%',y: '-50%'}).width(100).height(50)}.width('100%').height(500).backgroundColor(Color.Green).alignItems(HorizontalAlign.Start)}
}

运行效果:
在这里插入图片描述

说明:position+translate可以实现任意子组件水平垂直居中,position分别设置了50%此时子组件距离父组件上边和左边都为父组件宽高一半距离,此时子组件的左上角点刚好在父组件正中心点。想要让子组件居中只需让子组件的中心点和父组件中心重叠,把子组件向左和向上平移自身一半宽高即可,可以用通用属性translate进行平移

.translate({x: '-50%',y: '-50%'}

此处百分比相对组件本身宽高,负值表示往上或往左平移

示例5:

父容器带padding情况

@Entry
@Component
struct Index {build() {Column(){Button('按钮').position({top:0,left:0}).width(100).height(50)}.width('100%').height(500).backgroundColor(Color.Green).padding(50)}
}

运行效果:
在这里插入图片描述

说明:从运行效果可以看出相对父容器起始位置需要扣除父容器的padding部分


二、布局中的渲染控制

在vue中可以使用v-if,v-else条件语句控制子组件是否渲染,也可以通过v-for循环渲染多个子组件。鸿蒙也有类似用法分别为if/else和ForEach

1. if/else

布局渲染条件控制语句

示例:

@Entry
@Component
struct Index {@State type:number=0build() {Column() {//显示文本if(this.type==0){Text('文本')}//显示按钮else if(this.type==1){Button('按钮')}//显示文本输入框else{TextInput({placeholder:'文本输入框'})}Button('改变类型').onClick(()=>{this.type=++this.type%3}).margin({top:100})}.width('100%').height('100%').justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}
}

运行效果

请添加图片描述

说明:通过改变状态变量type动态控制显示的子组件,

需要注意if else内部只能写入子组件不能写入arkTs语法,比如打印信息console.log()就会报错。

2. ForEach

布局循环渲染控制语句
语法:

ForEach(list:Array<ESObject>,fn:(item:ESObject,index:number)=>void,fn:(item:ESObject,index:number)=>string)
其中:item为数组当前元素值,index为循环的索引

ForEach有三个入参,第一个入参是数据源数组,第二个入参是个函数,内部添加要循环渲染的子组件,第三个参数是函数返回唯一标识key,第三个入参类似vue v-for 的key作用为了避免重复渲染导致的额外开销提高性能,所以返回的key必须唯一值,不然会异常

示例1:

@Entry
@Component
struct Index {@State list: number[] = [1, 2, 3, 4, 5, 6]build() {Column() {ForEach(this.list, (item: number, index: number) => {//需要循环渲染的子组件Row() {Text(`内容为${item},第${index}`)}.padding(15).justifyContent(FlexAlign.Start).width('100%')//}, (item: number, index: number) => index + '')}.width('100%').height('100%')}
}

运行结果:
在这里插入图片描述

示例2:

List和ListItem系统组件(列表)使用

@Entry
@Component
struct Index {@State list: number[] = [1, 2, 3, 4, 5, 6]build() {List() {ForEach(this.list, (item: number, index: number) => {ListItem() {Text(`${index}`)}.height(60).width('100%').border({width:1,color:"#f2f2f2"})}, (item: number, index: number) => index + '')}}
}

运行结果:

在这里插入图片描述

ps:如果列表数据非常多加载卡顿也可以使用懒加载LazyForEach,请看官网文档LazyForEach:数据懒加载这里不再介绍。


三、项目开发过程中布局像素单位的选择

1、像素单位介绍

鸿蒙布局像素单位支持px、vp、lpx、fp4种单位,其中fp主要用来设置字体大小,数值不写单位默认是vp

px

屏幕物理像素单位。

vp

虚拟像素单位类似安卓里面的dp,VP是根据屏幕的‌PPI(每英寸像素点数)进行换算的。具体换算公式为:vp = (px * 160) / PPI,在480PPI手机上1vp=3px,简而言之,vp是屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素。

fp

字体像素,与vp类似适用屏幕密度变化,区别在于fp会随系统字体大小设置变化。即默认情况下 1 fp = 1vp。如果用户在设置中选择了更大的字体,字体的实际显示大小就会在 vp 的基础上乘以 scale 系数,即 1 fp = 1 vp * scale

lpx

视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,designWidth默认值为720。当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。

lpx类似css里面的rem或者小程序里面的rpx单位,以屏幕宽度为基准一种比值逻辑单位

2、像素单位之间的转换

鸿蒙sdk已自带单位换算方法,直接调用即可,如下:

在这里插入图片描述
示例:

    //vp转px单位vp2px(20)//px转lpxpx2lpx(20)//px转vppx2vp(20)//vp转lpx,没有直接转的函数,所以需要先把vp转px,在把px转lpxpx2lpx(vp2px(20))

3、实际开发单位的选择

实际开发中我们需要适配所有设备, 选择某个单位使得布局在所有设备显示比例一样。从上面介绍看,vp和lpx都能满足我们的需求,尽管vp是默认单位也是官方推荐使用的单位,但在实际开发中我们拿到设计稿尺寸跟vp换算复杂无法直接计算出来,在1440屏幕宽度的设备上1vp大约=3px,假如从设计稿读取尺寸为285px,换算为vp=285/3,每个地方都要这样心算就比较费劲了。当然你也可以选择用px2vp(285),但是每个地方都这样写代码显得囊肿。所以推荐使用lpx作为开发单位。如果你是web开发出身,你完全可以把lpx当做rem单位理解,鸿蒙的lpx支持我们自定义基准宽(designWidth),所以我们能轻松通过自定义designWidth值使得设计稿1px=1lpx。这样就不需要复杂换算,设计稿读取值多少就写多少。

lpx基准宽(designWidth)设置:

路径: entry/src/main/resources/base/profile/main_pages.json,添加:

"window": {"designWidth": 750}

在这里插入图片描述

拿到的设计稿宽多少,designWidth值就设置多少,比如设计稿是1080x1920,designWidth设置为1080。
这样设置完毕1px=1lpx

验证:

@Entry
@Component
struct Index {build() {Column() {Text('750lpx').width('750lpx').height('100lpx').backgroundColor(Color.Red)Text('730lpx').width('730lpx').height('100lpx').backgroundColor(Color.Yellow)Text('375lpx').width('375lpx').height('100lpx').backgroundColor(Color.Blue)}.alignItems(HorizontalAlign.Start)}
}

运行效果:
在这里插入图片描述
从运行效果可以看出当宽设置为750lpx刚好铺满屏幕,730lpx有一点间隙,375lpx占屏幕一半,符合预期效果,验证成功。

四、结束

结束前还是顺便提下鸿蒙布局里有个很常用的通用属性跟css命名长得最不一样,可能很多人一开始都找不到。

css中有个:overflow: hidden 表示子元素超出父元素范围的部分会被隐藏

对应的鸿蒙写法为:clip(true)

示例

未加clip(true)效果

@Entry
@Component
struct Index {build() {Stack() {Column() {Button('按钮').width(350).height(100)}.width(200).height(200).backgroundColor(Color.Red).justifyContent(FlexAlign.Center)}.height('100%').width('100%')}
}

在这里插入图片描述

加clip(true)效果

@Entry
@Component
struct Index {build() {Stack() {Column() {Button('按钮').width(350).height(100)}.width(200).height(200).backgroundColor(Color.Red).justifyContent(FlexAlign.Center).clip(true)}.height('100%').width('100%')}
}

在这里插入图片描述

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

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

相关文章

【HCIP园区网综合拓扑实验】配置步骤与详解(未施工完,持续更新中)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan 4、上层通过静态路由协议完成数据通信过程 5、…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说&#xff0c;该模式的目的用于隔离接口&#xff0c;换句话说&#xff0c;就是扮演中间层的角色&#xff0c;把本来结合…

软件设计师:排序算法总结

一、直接插入 排序方式&#xff1a;从第一个数开始&#xff0c;拿两个数比较&#xff0c;把后面一位跟前面的数比较&#xff0c;把较小的数放在前面一位 二、希尔 排序方式&#xff1a;按“增量序列&#xff08;步长&#xff09;”分组比较&#xff0c;组内元素比较交换 假设…

vue输入中文,获取英文首字母缩写

背景&#xff1a;要求输入中文的时候&#xff0c;系统给出对应的首字母大写&#xff0c;作为拼音。 例如&#xff1a;输入“博客”&#xff0c;输出‘BK’ 等等…… 经查&#xff1a;使用 js-pinyin 这个第三方插件即可实现 1. 下载依赖 npm install js-pinyin 或者 yarn ad…

数据结构与算法--回溯法

回溯法 1 括号生成分析&#xff1a; 2 解数独分析代码 回溯法本质是的暴力枚举/遍历法&#xff0c;一般用递归实现。 当我们可以把问题分解为若干个步骤&#xff0c;每个步骤都有若干个选择的时候&#xff0c;若需要列出所有解答形式&#xff0c;则采用枚举法。 1 括号生成 数…

外卖小程序的研究与开发ssm+论文源码调试讲解

2系统关键技术 2.1微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与普通…

花了6000多考下PMP却不会用?你真的懂PMP实际用法吗?

大家都已经下载了PMP的电子版证书吗&#xff1f;虽然拿到了电子证书&#xff0c;但很多人又开始期待纸质版证书。不要着急&#xff0c;考试后需要6-9个月才能拿到纸质版证书&#xff0c;可能还需要等一段时间。 电子证书和纸质证书具有同样的有效性&#xff0c;需要使用证书时…

Spring面向切面编程

目录 1.AOP概述及Spring AOP实现原理 AOP概述 AOP的应用场景 AOP的作用 Spring AOP概述 Spring AOP的实现原理 Spring AOP中Advice的分类 2. 通过xml配置实现AOP 实现步骤&#xff1a; 新增模块&#xff1a; 导入相关依赖&#xff1a; 新增实体类User 新增业务类UserS…

Javaweb选课系统-开源计划-起源-001-完全免费开源

项目部署&#xff0c;效果视频 https://www.bilibili.com/video/BV1LMDUY8Ef7/?spm_id_from333.880.my_history.page.click&vd_source17d16b2e328f19328e077e9cb07565ef项目地址&#xff1a; https://gitee.com/lucky-six/Javaweb-xuanke

【简信CRM-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Linux云计算 |【第五阶段】PROJECT3-DAY1

主要内容&#xff1a; 跳板机&#xff08;堡垒机&#xff09;的概念、部署JumpeServer 一、跳板机&#xff08;堡垒机&#xff09;的概念 跳板机&#xff08;Jump Server 或 Bastion Host&#xff09;是一种网络安全设备或服务器&#xff0c;也称堡垒机&#xff0c;是一类可作…

宠物空气净化器哪个牌子好?希喂、352两款产品吸力、噪音真实测试

我身为养宠博主&#xff0c;这些年用过不少宠物空气净化器&#xff0c;花费了1w&#xff0c;对很多产品都进行过测评。正值双十一&#xff0c;很多朋友都在问我宠物空气净化器到底有没有必要买&#xff1f;答案毫无疑问是有必要&#xff01; 相比较于其他清理工具&#xff0c;…

Clang-Tidy 是什么?如何让你的代码更干净无瑕

Clang-Tidy&#xff1a;让你的代码更干净&#xff0c;让潜在问题无处遁形 在现代软件开发中&#xff0c;代码质量不再仅仅体现在功能实现上&#xff0c;还包括其可维护性、可读性和潜在问题的检测。clang-tidy 是一款功能强大的静态分析工具&#xff0c;专为 C/C 代码而生&…

微服务中常用分布式锁原理及执行流程

1.什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制&#xff0c;它主要用于解决&#xff0c;多个分布式节点之间对共享资源的互斥访问问题&#xff0c;确保在分布式系统中&#xff0c;即使存在有多个不同节点上的进程或线程&#xff0c;同一时刻也只有一个节点可…

【算法】(Python)动态规划

动态规划&#xff1a; dynamic programming。"programming"指的是一种表格法&#xff0c;而非编写计算机程序。通常解决最优化问题&#xff08;optimization problem&#xff09;。将问题拆分成若干个子问题&#xff0c;求解各子问题来得到原问题的解。适用于多阶段…

PySpark本地开发环境搭建

一.前置事项 请注意&#xff0c;需要先实现Windows的本地JDK和Hadoop的安装。 二.windows安装Anaconda 资源&#xff1a;Miniconda3-py38-4.11.0-Windows-x86-64&#xff0c;在window使用的Anaconda资源-CSDN文库 右键以管理员身份运行&#xff0c;选择你的安装路径&#x…

深度学习经典模型之ZFNet

1 ZFNet 1.1 模型介绍 ​ ZFNet是由 M a t t h e w Matthew Matthew D . Z e i l e r D. Zeiler D.Zeiler和 R o b Rob Rob F e r g u s Fergus Fergus在AlexNet基础上提出的大型卷积网络&#xff0c;在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军&#xff08;实际…

2024网盘搜索引擎合集推荐:高效搜索资源的利器

2024网盘搜索引擎合集推荐&#xff1a;高效搜索资源的利器 在这个信息爆炸的时代&#xff0c;找到合适的资源变得越来越重要。以下是一些网盘搜索引擎的推荐&#xff0c;它们可以帮助您快速找到所需的文件和资料。 咔帕搜索&#xff1a;简单高效的云盘搜索 网址&#xff1a;…

最新榜单!国内免费好用的OA协同软件前十名

在现代企业管理中&#xff0c;OA&#xff08;Office Automation&#xff09;协同软件已成为提升工作效率、简化沟通流程的重要工具。OA协同软件的主要功能涵盖任务管理、文件共享、审批流程、日程安排等&#xff0c;从而帮助企业更高效地进行跨部门协作、信息传递和项目跟踪。在…

Java自动点名器实现案例详解

Java自动点名器实现案例详解 在教学管理中&#xff0c;点名是一项重要的任务。随着技术的发展&#xff0c;使用编程语言实现自动化的点名器不仅可以提高效率&#xff0c;还能增加课堂的互动性和趣味性。本文将详细介绍三个案例&#xff0c;分别是简单随机点名器、带有权重的随…