鸿蒙Harmony-列表组件(List)详解

不要和别人比生活,每个人阶段不同,追求不同,活法自然也不同。只要今天的你能比昨天的你快乐一点点,那你就是自己人生赢家。

目录

一,定义

二,布局与约束

2.1 布局

2.2 约束

三,开发布局

3.1 设置主轴方向

3.2设置交叉轴布局

四,迭代列表内容

五,自定义列表样式

5.1 设置内容间距

5.2 添加分隔线

5.3 添加滚动条

5.4 支持分组列表

5.5 添加粘性标题

5.6 控制滚动位置

5.7 响应列表项侧滑

5.8 给列表项添加标记

一,定义

类似于Android的recyclerview,鸿蒙的列表List是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等)。

使用列表可以轻松高效地显示结构化、可滚动的信息。通过在List组件中按垂直或者水平方向线性排列子组件ListItemGroup或ListItem,为列表中的行或列提供单个视图,或使用循环渲染迭代一组行或列,或混合任意数量的单个视图和ForEach结构,构建一个列表。List组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。

二,布局与约束

列表作为一种容器,会自动按其滚动方向排列子组件,向列表中添加组件或从列表中移除组件会重新排列子组件。

在垂直列表中,List按垂直方向自动排列ListItemGroup或ListItem。

ListItemGroup用于列表数据的分组展示,其子组件也是ListItem。ListItem表示单个列表项,可以包含单个子组件。

注意:List的子组件必须是ListItemGroup或ListItem,ListItem和ListItemGroup必须配合List来使用。

2.1 布局

List除了提供垂直和水平布局能力、超出屏幕时可以滚动的自适应延伸能力之外,还提供了自适应交叉轴方向上排列个数的布局能力。

利用垂直布局能力可以构建单列或者多列垂直滚动列表

利用水平布局能力可以是构建单行或多行水平滚动列表

2.2 约束

列表的主轴方向是指子组件列的排列方向,也是列表的滚动方向。垂直于主轴的轴称为交叉轴,其方向与主轴方向相互垂直。

垂直列表的主轴是垂直方向,交叉轴是水平方向;水平列表的主轴是水平方向,交叉轴是垂直方向。

如果List组件主轴或交叉轴方向设置了尺寸,则其对应方向上的尺寸为设置值。

如果List组件主轴方向没有设置尺寸,当List子组件主轴方向总尺寸小于List的父组件尺寸时,List主轴方向尺寸自动适应子组件的总尺寸。

类似于Android的wrap_content

三,开发布局

3.1 设置主轴方向

List组件主轴默认是垂直方向,即默认情况下不需要手动设置List方向,就可以构建一个垂直滚动列表。

若是水平滚动列表场景,将List的listDirection属性设置为Axis.Horizontal即可实现。listDirection默认为Axis.Vertical,即主轴默认是垂直方向。

垂直列表:

@Entry
@Component
struct Index {

  build() {
    List(){
      ListItem(){
        Text("袁震1").fontSize(24)
      }
      ListItem(){
        Text("袁震2").fontSize(24)
      }
      ListItem(){
        Text("袁震3").fontSize(24)
      }
    }.listDirection(Axis.Vertical)
  }
}

水平列表:

@Entry
@Component
struct Index {

  build() {
    List(){
      ListItem(){
        Text("袁震1").fontSize(24)
      }
      ListItem(){
        Text("袁震2").fontSize(24)
      }
      ListItem(){
        Text("袁震3").fontSize(24)
      }
    }.listDirection(Axis.Horizontal)
  }
}

3.2设置交叉轴布局

List组件的交叉轴布局可以通过lanes和alignListItem属性进行设置,lanes属性用于确定交叉轴排列的列表项数量,alignListItem用于设置子组件在交叉轴方向的对齐方式。

List组件的lanes属性通常用于在不同尺寸的设备自适应构建不同行数或列数的列表,即一次开发、多端部署的场景,例如歌单列表。lanes属性的取值类型是"number | LengthConstrain",即整数或者LengthConstrain类型。以垂直列表为例,如果将lanes属性设为2,表示构建的是一个两列的垂直列表。lanes的默认值为1,即默认情况下,垂直列表的列数是1。

交叉轴方向列表项是2,对齐方式为居中对齐:

@Entry
@Component
struct Index {

  build() {
    List(){
      ListItem(){
        Text("袁震1").fontSize(24)
      }
      ListItem(){
        Text("袁震2").fontSize(24)
      }
      ListItem(){
        Text("袁震3").fontSize(24)
      }
      ListItem(){
        Text("袁震4").fontSize(24)
      }
    }
    .listDirection(Axis.Vertical)
    .lanes(2)
    .alignListItem(ListItemAlign.Center)
  }
}

当其取值为LengthConstrain类型时,表示会根据LengthConstrain与List组件的尺寸自适应决定行或列数。

例如,假设在垂直列表中设置了lanes的值为{ minLength: 200, maxLength: 300 }。此时,

 当List组件宽度为300vp时,由于minLength为200vp,此时列表为一列:

@Entry
@Component
struct Index {
  @State egLanes: LengthConstrain = { minLength: 200, maxLength: 300 }
  build() {
    List(){
      ListItem(){
        Text("袁震1").fontSize(24)
      }
      ListItem(){
        Text("袁震2").fontSize(24)
      }
      ListItem(){
        Text("袁震3").fontSize(24)
      }
      ListItem(){
        Text("袁震4").fontSize(24)
      }
    }
    .width(300)
    .lanes(this.egLanes)
    .listDirection(Axis.Vertical)
    .alignListItem(ListItemAlign.Center)
  }
}

  

当List组件宽度变化至400vp时,符合两倍的minLength,则此时列表自适应为两列:

@Entry
@Component
struct Index {
  @State egLanes: LengthConstrain = { minLength: 200, maxLength: 200 }
  build() {
    List(){
      ListItem(){
        Text("袁震1").fontSize(24)
      }
      ListItem(){
        Text("袁震2").fontSize(24)
      }
      ListItem(){
        Text("袁震3").fontSize(24)
      }
      ListItem(){
        Text("袁震4").fontSize(24)
      }
    }
    .width(400)
    .lanes(this.egLanes)
    .listDirection(Axis.Vertical)
    .alignListItem(ListItemAlign.Center)
  }
}

  

四,迭代列表内容

通常,应用通过数据集合动态地创建列表。使用循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件,降低代码复杂度。

ArkTS通过ForEach提供了组件的循环渲染能力。

新建数据类:

export default class YuanZhen {

  public name: string = 'YuanZhen';

  public age: number = 18;

  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
}

组件:

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
    this.list.push(new YuanZhen("袁震6",23))
  }

  build() {
    List(){
      ForEach(this.list,(item:YuanZhen)=>{
        ListItem(){
          Row() {
            Image($r('app.media.startIcon'))
              .width(40)
              .height(40)
              .margin(10)
            Text(item.name).fontSize(20)
            Text("  年龄:"+item.age).fontSize(20)
          }
        }
      })
    }
    .width(400)
    .listDirection(Axis.Vertical)
  }
}

五,自定义列表样式

5.1 设置内容间距

在初始化列表时,如需在列表项之间添加间距,可以使用space参数。例如,在每个列表项之间沿主轴方向添加10vp的间距

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
    this.list.push(new YuanZhen("袁震6",23))
  }

  build() {
    List({space:10}){
      ForEach(this.list,(item:YuanZhen)=>{
        ListItem(){
          Row() {
            Image($r('app.media.startIcon'))
              .width(40)
              .height(40)
              .margin(10)
            Text(item.name).fontSize(20)
            Text("  年龄:"+item.age).fontSize(20)
          }
        }
      })
    }
    .width(400)
    .listDirection(Axis.Vertical)
  }
}

5.2 添加分隔线

分隔线用来将界面元素隔开,使单个元素更加容易识别。

List提供了divider属性用于给列表项之间添加分隔线。在设置divider属性时,可以通过strokeWidth和color属性设置分隔线的粗细和颜色。

startMargin和endMargin属性分别用于设置分隔线距离列表侧边起始端的距离和距离列表侧边结束端的距离。

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
    this.list.push(new YuanZhen("袁震6",23))
  }

  build() {
    List({space:10}){
      ForEach(this.list,(item:YuanZhen)=>{
        ListItem(){
          Row() {
            Image($r('app.media.startIcon'))
              .width(40)
              .height(40)
              .margin(10)
            Text(item.name).fontSize(20)
            Text("  年龄:"+item.age).fontSize(20)
          }
        }
      })
    }
    .divider({
      strokeWidth:1,
      startMargin:60,
      endMargin:10,
      color: '#ffe9f0f0'
    })
    .width(400)
    .listDirection(Axis.Vertical)
  }
}

5.3 添加滚动条

当列表项高度(宽度)超出屏幕高度(宽度)时,列表可以沿垂直(水平)方向滚动。在页面内容很多时,若用户需快速定位,可拖拽滚动条,

在使用List组件时,可通过scrollBar属性控制列表滚动条的显示。scrollBar的取值类型为BarState,当取值为BarState.Auto表示按需显示滚动条。此时,当触摸到滚动条区域时显示控件,可上下拖拽滚动条快速浏览内容,拖拽时会变粗。若不进行任何操作,2秒后滚动条自动消失。

从API version 10版本开始默认值为BarState.Auto

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震6",23))
    this.list.push(new YuanZhen("袁震8",28))
  }

  build() {
    List({space:10}){
      ForEach(this.list,(item:YuanZhen)=>{
        ListItem(){
          Row() {
            Image($r('app.media.startIcon'))
              .width(40)
              .height(40)
              .margin(10)
            Text(item.name).fontSize(20)
            Text("  年龄:"+item.age).fontSize(20)
          }
        }
      })
    }.scrollBar(BarState.On)
    .divider({
      strokeWidth:1,
      startMargin:60,
      endMargin:10,
      color: '#ffe9f0f0'
    })
    .width(400)
    .listDirection(Axis.Vertical)
  }
}

5.4 支持分组列表

在列表中支持数据的分组展示,可以使列表显示结构清晰,查找方便,从而提高使用效率。

在List组件中使用ListItemGroup对项目进行分组,可以构建二维列表。

在List组件中可以直接使用一个或者多个ListItemGroup组件,ListItemGroup的宽度默认充满List组件。在初始化ListItemGroup时,可通过header参数设置列表分组的头部组件。

如果多个ListItemGroup结构类似,可以将多个分组的数据组成数组,然后使用ForEach对多个分组进行循环渲染。

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  @Builder itemHead(text: string) {
    Text(text)
      .fontSize(20)
      .backgroundColor('#345')
      .width('100%')
      .padding(5)
  }

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
  }

  build() {
    List({space:10}){
      ListItemGroup({ header: this.itemHead('A') }) {
        // 循环渲染分组A的ListItem
        ForEach(this.list,(item:YuanZhen)=>{
          ListItem(){
            Row() {
              Image($r('app.media.startIcon'))
                .width(40)
                .height(40)
                .margin(10)
              Text(item.name).fontSize(20)
              Text("  年龄:"+item.age).fontSize(20)
            }
          }
        })
      }
      ListItemGroup({ header: this.itemHead('B') }) {
        // 循环渲染分组A的ListItem
        ForEach(this.list,(item:YuanZhen)=>{
          ListItem(){
            Row() {
              Image($r('app.media.startIcon'))
                .width(40)
                .height(40)
                .margin(10)
              Text(item.name).fontSize(20)
              Text("  年龄:"+item.age).fontSize(20)
            }
          }
        })
      }

    }.scrollBar(BarState.On)
    .divider({
      strokeWidth:1,
      startMargin:60,
      endMargin:10,
      color: '#ffe9f0f0'
    })
    .width(400)
    .listDirection(Axis.Vertical)
  }
}

5.5 添加粘性标题

粘性标题是一种常见的标题模式,常用于定位字母列表的头部元素。

粘性标题不仅有助于阐明列表中数据的表示形式和用途,还可以帮助用户在大量信息中进行数据定位,从而避免用户在标题所在的表的顶部与感兴趣区域之间反复滚动。

List组件的sticky属性配合ListItemGroup组件使用,用于设置ListItemGroup中的头部组件是否呈现吸顶效果或者尾部组件是否呈现吸底效果。

通过给List组件设置sticky属性为StickyStyle.Header,即可实现列表的粘性标题效果。如果需要支持吸底效果,可以通过footer参数初始化ListItemGroup的底部组件,并将sticky属性设置为StickyStyle.Footer。

5.6 控制滚动位置

控制滚动位置在实际应用中十分常见,例如当新闻页列表项数量庞大,用户滚动列表到一定位置时,希望快速滚动到列表底部或返回列表顶部。此时,可以通过控制滚动位置来实现列表的快速定位

List组件初始化时,可以通过scroller参数绑定一个Scroller对象,进行列表的滚动控制。例如,用户在新闻应用中,点击新闻页面底部的返回顶部按钮时,就可以通过Scroller对象的scrollToIndex方法使列表滚动到指定的列表项索引位置。

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  listScroller: Scroller = new Scroller();

  @Builder itemHead(text: string) {
    Text(text)
      .fontSize(20)
      .backgroundColor('#345')
      .width('100%')
      .padding(5)
  }

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
  }

  build() {
    Column(){
      Text("回到顶部").width(50).height(50).onClick(()=>{
        this.listScroller.scrollToIndex(0)
      })
      List({space:10, scroller: this.listScroller}){
        ListItemGroup({ header: this.itemHead('A') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }
          })
        }
        ListItemGroup({ header: this.itemHead('B') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }
          })
        }

        ListItemGroup({ header: this.itemHead('C') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }
          })
        }

      }.scrollBar(BarState.On)
      .divider({
        strokeWidth:1,
        startMargin:60,
        endMargin:10,
        color: '#ffe9f0f0'
      })
      .sticky(StickyStyle.Header)  // 设置吸顶,实现粘性标题效果
      .width("100%")
      .listDirection(Axis.Vertical)
    }
    .width("100%")
    .height("100%")
  }
}

5.7 响应列表项侧滑

ListItem的swipeAction属性可用于实现列表项的左右滑动功能。swipeAction属性方法初始化时有必填参数SwipeActionOptions,其中,start参数表示设置列表项右滑时起始端滑出的组件,end参数表示设置列表项左滑时尾端滑出的组件。

在消息列表中,end参数表示设置ListItem左滑时尾端划出自定义组件,即删除按钮。在初始化end方法时,将滑动列表项的索引传入删除按钮组件,当用户点击删除按钮时,可以根据索引值来删除列表项对应的数据,从而实现侧滑删除功能。

import YuanZhen from './bean/YuanZhen'

@Entry
@Component
struct Index {

  @State list:Array<YuanZhen>=new Array

  listScroller: Scroller = new Scroller();


  @Builder itemHead(text: string) {
    Text(text)
      .fontSize(20)
      .backgroundColor('#345')
      .width('100%')
      .padding(5)
  }

  @Builder itemEnd(index: number) {
    // 构建尾端滑出组件
    Button({ type: ButtonType.Circle }) {
      Image($r('app.media.startIcon'))
        .width(20)
        .height(20)
    }
    .onClick(() => {
      // this.messages为列表数据源,可根据实际场景构造。点击后从数据源删除指定数据项。
      this.list.splice(index, 1);
    })
  }

  aboutToAppear(){
    this.list.push(new YuanZhen("袁震1",18))
    this.list.push(new YuanZhen("袁震2",19))
    this.list.push(new YuanZhen("袁震3",20))
    this.list.push(new YuanZhen("袁震4",21))
    this.list.push(new YuanZhen("袁震5",22))
  }

  build() {
    Column(){
      List({space:10, scroller: this.listScroller}){
        ListItemGroup({ header: this.itemHead('A') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen,index)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }.swipeAction({ end: this.itemEnd(index) }) // 设置侧滑属性
          })
        }
        ListItemGroup({ header: this.itemHead('B') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }
          })
        }

        ListItemGroup({ header: this.itemHead('C') }) {
          // 循环渲染分组A的ListItem
          ForEach(this.list,(item:YuanZhen)=>{
            ListItem(){
              Row() {
                Image($r('app.media.startIcon'))
                  .width(40)
                  .height(40)
                  .margin(10)
                Text(item.name).fontSize(20)
                Text("  年龄:"+item.age).fontSize(20)
              }
            }
          })
        }

      }.scrollBar(BarState.On)
      .divider({
        strokeWidth:1,
        startMargin:60,
        endMargin:10,
        color: '#ffe9f0f0'
      })
      .sticky(StickyStyle.Header)  // 设置吸顶,实现粘性标题效果
      .width("100%")
      .listDirection(Axis.Vertical)

    }
    .width("100%")
    .height("100%")
  }
}

5.8 给列表项添加标记

添加标记是一种无干扰性且直观的方法,用于显示通知或将注意力集中到应用内的某个区域。例如,当消息列表接收到新消息时,通常对应的联系人头像的右上方会出现标记,提示有若干条未读消息

在ListItem中使用Badge组件可实现给列表项添加标记功能。Badge是可以附加在单个组件上用于信息标记的容器组件。

在消息列表中,若希望在联系人头像右上角添加标记,可在实现消息列表项ListItem的联系人头像时,将头像Image组件作为Badge的子组件。

在Badge组件中,count和position参数用于设置需要展示的消息数量和提示点显示位置,还可以通过style参数灵活设置标记的样式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中&#xff0c;对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台&#xff0c;创新地模拟荧光显微管在滑动实验中的动态行为&#xff0c;这一过程不仅提升了实验效率&#xff0c;还为…

探寻爬虫世界01:HTML页面结构

文章目录 一、引言&#xff08;一&#xff09;背景介绍&#xff1a;选择爬取51job网站数据的原因&#xff08;二&#xff09;目标与需求明确&#xff1a;爬取51job网站数据的目的与用户需求 二、网页结构探索&#xff08;一&#xff09;51job网页结构分析1、页面组成&#xff1…

速通——决策树(泰坦尼克号乘客生存预测案例)

一、决策树 1、概述 树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果 2、建立过程 1. 特征选择&#xff1a;选取有较强分类能力的特征。 2. 决策树生成&#xff1a;根据选择的特征生成决策树。 3.…

下一代 Vue3 Devtools 正式开源

什么是 Vue DevTools Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具,它提供了一些功能来帮助开发者更好地了解 Vue 应用程序。 Vue DevTools:Unleash Vue Developer Experience. Enhance your Vue development journey with an amazing experience! 典型的功能特征包…

6.3.3分离音频和视频

6.3.3分离音频和视频 Camtasia4有一个很实用的功能&#xff0c;那就是能够把视频片段中的视频和音频分离开来&#xff0c;这在多媒体作品创作中非常有用。 1&#xff0e;启动Camtasia音频编辑器。 2&#xff0e;选择【文件】|【打开】命令&#xff0c;在弹出的“打开文件”对…

法国追梦 SAM5504/5704/5716/5808 芯片/开发板/方案 详细资料

追梦音频DSP芯片&#xff1a;可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 一.系列芯片&#xff1a;SAM2695 SAM5708B SAM5704B SAM5504B SAM5808B SAM5716B SAM5916B 二.开发套件 1.开发板/评估板&#xff1a;2695-EK&#xff0c;5504-EK&#…

Kali Linux保姆级教程|零基础从入门到精通,看完这一篇就够了!(附工具包)

作为一名从事网络安全的技术人员&#xff0c;不懂Kali Linux的话&#xff0c;连脚本小子都算不上。 Kali Linux预装了数百种享誉盛名的渗透工具&#xff0c;使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 今天给大家分享一套Kali Linux资料合集&#xf…

考研机试题收获——高精度进制转换

代码的第一遍真的很重要&#xff0c;在第一次打的时候尽量把问题思考全面&#xff0c;不要漏打少打&#xff0c;尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf()&#xff1a;如果从文件中读取数据&#xff0c;当scanf()…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 &#xff08;直接连接&#xff09; RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同&#xff0c;将第四段分别转换成二进制 11000001 11000010 前6位相同&#xff0c;加上前面三段 共30…

Vue3 + Electron框架读取程序外部配置文件

网上找了一堆都不行&#xff0c;根据这个步骤来肯定能用 1. 在项目下新建一个config.json文件 2. json文件中写入一些配置 3. vue.config.js中配置打包时把config.json文件copy到应用目录下 pluginOptions:{electronBuilder:{nodeIntegration:true,builderOptions: {extraReso…

VUE好看的个人博客源码

文章目录 1.设计来源1.1 首页界面1.2 我的日记界面1.3 我的文章界面1.3.1 文章列表1.3.2 文章时间轴1.3.3 文章详细 1.4 我的相册界面1.5 我的源码界面1.6 认识我界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https:/…

在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型

在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型 0. 背景1. 安装依赖2. 开发 main.py3. 运行 main.py 0. 背景 看了一些文章之后&#xff0c;今天尝试在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型。 1. 安装依赖 pip install torch torchvision …

【Git】任何位置查看git日志

需求 现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable &#xff0c;需要查看其下文件 D:\z_workspace\jflowable\src\main\java\com\xzbd\jflowable\controller\TestController.java 的日志。 分析 一般的思路是&#xff0c;进入 jflowable 项目&#…

bledner快捷键记录

shiftc游标归到世界的中心 shifta快速添加物体 x键删除物体 r旋转物体 s是放大放小 ~查看视图 工作区&#xff1a;添加材质节点的 鼠标的滚轮&#xff1a;是旋转视图 按住 滚轮中键shift 平移视图 g键 移动 调整的时候按住shift鼠标拖动 这个时候可以比较精细的调整物体的大小…

专业140+总410+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息(信息与通信工程-信通)

一年的努力付出终于有了收获&#xff0c;今年专业课140&#xff0c;总分410顺利上岸哈工大803电子信息&#xff08;信息与通信-信通&#xff09;&#xff0c;回顾总结了自己这一年的复习&#xff0c;有得有失&#xff0c;希望对大家复习有所帮助。 数学 时间安排&#xff1a;…

为什么需要在 OpenShift 上部署企业级 Ingress Controller

原文作者&#xff1a;Max Mortillaro of GigaOm 原文链接&#xff1a;为什么需要在 OpenShift 上部署企业级 Ingress Controller 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn Red Hat OpenShift 作为业界备受推崇的 Kubernetes…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…

Camunda入门教程

Camunda7 流程引擎 1.什么是流程引擎 流程引擎是一种软件工具&#xff0c;可以用来自动执行和管理业务流程。它以可视化的流程图作为工作流程的基础&#xff0c;根据可视化流程图中定义的活动、任务和角色来执行和管理活动任务。 2.流程引擎功能 一.可视化&#xff1a;流程…

.Net Core项目在linux部署实战 1.sdk下载 2.环境变量配置/ect/profile 3.运行

1)下载.net core sdk https://download.visualstudio.microsoft.com/download/pr/01292c7c-a1ec-4957-90fc-3f6a2a1e5edc/025e84c4d9bd4aeb003d4f07b42e9159/dotnet-sdk-6.0.418-linux-x64.tar.gz 2)配置下环境变量 step1: // 解压到指定目录 mkdir -p $HOME/dotnet &…

Linux命令之pwd,cd,ls,cat,more,less,head,tail文件目录类命令的使用

一、实验题 1、在桌面打开终端&#xff0c;查看当前目录 2、改变目录位置至当前目录的父目录 3、改变目录位置至用户的家目录 4、利用绝对路径改变目录到/usr/local目录下 5、列出当前目录下的文件及目录 6、列出包括以“.”开始的隐藏文件在内的所有文件 7、列出当前目录下所…
最新文章