ArkTS的常用组件

ArkTS的常用组件

一、Swiper轮播组件

示例:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Swiper() {
        Image($r('app.media.backpageExp'))
        Image($r('app.media.background'))
        Image($r('app.media.backpageExp'))
      }
      .width("100%")
  //  .height(100)	//不限定高度,就是为了让轮播图在多端系统上面更好的
      .aspectRatio(2.4)
      .border({
        width: 1
      })
    }
    .width("100%")
    .height("100%")
  }
}

1. 常见属性

属性属性传承类型作用默认值
loopboolean是否开启循环true
autoPlayboolean是否自动播放false
intervalnumber自动播放的时间间隔3000
verticalboolean纵向滑动轮播false

示例:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Swiper() {
        Image($r('app.media.backpageExp'))
        Image($r('app.media.background'))
        Image($r('app.media.backpageExp'))
      }
      .width("100%")
      .height(100)
      .border({
        width: 1
      })
      .autoPlay(true)
      .interval(1000)
   // .loop(false)
    }
    .width("100%")
    .height("100%")
  }
}

2. 样式自定义

语法:

Swiper(){
	...
}
.indercator(
	Indicator.dot()		// 设置小圆点的相关属性
		.itemWidth(20)		// 未选中时候的高
		.itemHeight(20)		// 未选中时候的宽
		.color(Color.Black)   // 未选中时候的颜色
		.selectedItemWidth(30)   // 选中时候的宽
		.selectedItemHight(30)   // 选中时候的高
		.selectedColor(Color.White)  // 选中时候的颜色
)

二、Scroll滑动组件

用法说明:

  1. 设置尺寸
  2. 设置溢出的子组件(只支持一个子组件)
  3. 滚动方向

1. 常用属性

属性名称参数类型作用
scrollableScrollDirection设置滚动方向ScrollDirection.Vertical 纵向
ScrollDirection.Horizontal 横向
scrollBarBarState设置滚动条状态
scrollBarColorstring | number | Color设置滚动条颜色
scrollBarWidthstring | number设置滚动条宽度
edgeEffectvalue: EdgeEffect设置边缘滑动效果EdgeErrect.None 无
EdgeErrect.Spring 弹簧
EdgeEffect.Fade 阴影

示例:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Scroll() {
        Column({ space: 10 }) {
          ForEach(Array.from({ length: 10 }), (item: string, index) => {
            Text(`测试文本${index + 1}`)
              .width("100%")
              .height(100)
              .fontSize(20)
              .fontColor(Color.White)
              .textAlign(TextAlign.Center)
              .backgroundColor(Color.Orange)
              .borderRadius(25)
          })
        }
        .width("100%")
        .padding(10)
      }
      .width("100%")
      .height(600)
      .border({
        width: 1
      })
      .scrollable(ScrollDirection.Vertical)
      .scrollBarColor(Color.Blue)
      .scrollBarWidth(10)
      .edgeEffect(EdgeEffect.Spring)
    }
    .width("100%")
    .height("100%")
  }
}

2. 滑动条控制器

步骤:

a. 实例化 Scroll 的控制器

scroller: Scroller = new Scroller()

b.绑定给 Scroll 组件

Scroll(this.scroller){
	...
}

c.控制器的方法 控制滚动,控制器属性 获取滚动距离

	this.scroller.scrollEdge(Edge.Top)		// 回到顶部
	this.scroller.scrollEdge(Edge.Bottom)	// 去到底部
	this.scroller.currentOffset().xOffset	//获取当前滚动的x轴距离
    this.scroller.currentOffset().yOffset	//获取当前滚动的y轴距离

示例:

@Entry
@Component
struct Index {
  scroller: Scroller = new Scroller();
  build() {
    Column() {
      Scroll(this.scroller) {
        Column({ space: 10 }) {
          ForEach(Array.from({ length: 10 }), (item: string, index) => {
            Text(`测试文本${index + 1}`)
              .width("100%")
              .height(100)
              .fontSize(20)
              .fontColor(Color.White)
              .textAlign(TextAlign.Center)
              .backgroundColor(Color.Orange)
              .borderRadius(25)
          })
        }
        .width("100%")
        .padding(10)
      }
      .width("100%")
      .height(600)
      .border({
        width: 1
      })
      .scrollable(ScrollDirection.Vertical)
      .scrollBarColor(Color.Blue)
      .scrollBarWidth(10)
      .edgeEffect(EdgeEffect.Spring)

      Row() {
        Button('回到顶部')
          .onClick(() => {
            this.scroller.scrollEdge(Edge.Top)
          })
        Button('去到底部')
          .onClick(() => {
            this.scroller.scrollEdge(Edge.Bottom)
          })
      }

      Button('获取已经滚动的距离')
        .onClick(() => {
          const x = this.scroller.currentOffset().xOffset
          const y = this.scroller.currentOffset().yOffset
          AlertDialog.show({
            message: `x = ${x}, y = ${y}`
          })
        })
    }
    .width("100%")
    .height("100%")
  }
}

4. 滚动容器的事件

在滚动的元素同时,触发一些事件(函数)

注意:现在已经将onScroller该属性废除了,改用onWillScroll

语法:

	.onWillScroll((...)=>{
		...
	})

示例:

//获取已经滚动的距离
	Scroll(){
		...
	}
    .onWillScroll((x, y) => {
       console.log(`当前滑动距离 x: ${x} y:${y}`)		//可以用来控制滑动一定距离是,显示置顶按钮
    })
    ...

三、Tabs导航栏组件

用途: 做分页处理,即导航栏的使用

Tabs标签可以直接铺满整个屏幕,这样更适配且方便开发

1. 基础结构

build(){
	Tabs(){
		TabContent(){
		
		}
		.tabBar('首页’)
		TabContent(){
		
		}
		.tabBar('收藏’)
		TabContent(){
		
		}
		.tabBar('内容’)
	}
}
  • Tabs( ) 表面这个页面已经是一个被导航栏控制的页面

  • TabContent( ) 则是导航栏所能在单页面上显示的内容,

​ 这个其实就类似于层叠布局,只是被选择的TabContent层级更高,覆盖了其他的

  • .tabBar则是直接构造出一个可供点击的导航栏区域,让页面切换更合理

    ​ 他的高度不可变?

2. 常用属性

属性名称参数类型作用传参位置
barPositionBarPosition调整导航栏的位置BarPosition.Start
BarPosition.End
Tabs({ barPosition: BarPosition.Start })
verticalboolen调整导航栏水平或垂直true/falseTabs( ).vertical( )
scrollableboolen调整是否手势滑动切换true/falseTabs( ).scrollable( )
animationDurationboolen导航栏的切换时间true/falseTabs( ).vertical( )
barModeBarMode导航栏是否可滑动(当导航栏元素过多时)BarMode.ScrollableTabs( ).barMode( )

示例:

@Entry
@Component
struct Index {
  scroller: Scroller = new Scroller();
  titles: string[] = [
    '首页', '关注', '热门', '军事', '体育', '数码', '财经', '美食', '旅行'
  ]

  build() {
    Tabs({ barPosition: BarPosition.Start }) {
      ForEach(this.titles, (item: string, index) => {
        TabContent() {
          Text(`${item}内容`)
        }
        .tabBar(item)		
      })
    }
    .barMode(BarMode.Scrollable)	//当元素较多的时候再使用,少的时候会压缩宽度
    .animationDuration(1000)
    .scrollable(false)

    // .vertical(true)
  }
}

3. 自定义TabBar

使用@Builder来创建一个带结构的样式,让他作为参数放入到 .tabBar() 中

示例

@Builder
function myTabBarStyle(text: string) {
  Column({ space: 10 }) {
    Image($r('app.media.startIcon'))
      .height(30)
    Text(text)
  }
  .margin({
    left: 5,
    right: 5
  })
  .border({
    width: 1
  })
}

@Entry
@Component
struct Index {
  scroller: Scroller = new Scroller();
  titles: string[] = [
    '首页', '关注', '热门', '军事', '体育', '数码', '财经', '美食', '旅行'
  ]

  build() {
    Tabs({ barPosition: BarPosition.Start }) {
      ForEach(this.titles, (item: string, index) => {
        TabContent() {
          Text(`${item}内容`)
        }
        .tabBar(myTabBarStyle(item))
      })
    }
    .barMode(BarMode.Scrollable)
    .animationDuration(1000)
    .scrollable(false)
  }
}

4. TabBar高亮选择切换

思路:

I. 记录所点击的 TabBar 的索引

II.在TabBar内部比较 标记 == 记录的标记 ? 高亮 : 不高亮

示例:

@Entry
@Component
struct Index {
  @State selectIndex: number = 0;

  @Builder
  myTabBarStyle(index: number, text: string, selImg: ResourceStr, img: ResourceStr) {
    Column({ space: 10 }) {
      Image(index == this.selectIndex ? selImg : img)
        .height(30)
      Text(text)
        .fontColor(index == this.selectIndex ? Color.Red : Color.Gray)
    }
  }

  build() {
    Tabs({ barPosition: BarPosition.End }) {
      TabContent() {
        Text(`内容`)
      }
      .tabBar(this.myTabBarStyle(0, '首页', $r('app.media.startIcon'), $r('app.media.foreground')))

      TabContent() {
        Text(`内容`)
      }
      .tabBar(this.myTabBarStyle(1, '收藏', $r('app.media.startIcon'), $r('app.media.foreground')))

      TabContent() {
        Text(`内容`)
      }
      .tabBar(this.myTabBarStyle(2, '我的', $r('app.media.startIcon'), $r('app.media.foreground')))
    }
    // .barMode(BarMode.Scrollable)
    .animationDuration(1000)
    .scrollable(false)
    .onTabBarClick((index: number) => {
      this.selectIndex = index;
    })
    // .onChange((index: number) => {
    //   this.selectIndex = index;
    // });
    .backgroundColor('#ccc')

  }
}

四、List列表组件

当列表元素到达一定数量时,超过List组件限定的大小时,自动滚动,很方便处理数组元素

1. 常见属性

属性名称参数类型作用
listDirectionAxis调整主轴方向Axis.Vertical 水平
Axis.Horizontal 垂直
lanesnumber, number调整列数和距离lanes(2, 3)
alignListItemListItemAlign列的对齐方式ListItemAlign.Start
ListItemAlign.Center
ListItemAlign.End
scrollBarBarState滚动条状态BarState.Auto
divider{stroken: ,color: ,startMargin: , endMargin: }列之间的分割线的样式{ strokeWidth: 2, color: Color.Blue, }

示例:

List() {
  ForEach(Array.from({ length: 20 }), () => {
    ListItem() {
      Row() {
      }.width("80%").height(100).backgroundColor(Color.Brown)
    }
    .padding(10)
  })
}
.width("100%")
.height("80%")
.border({
  width: 1
})
.layoutWeight(1)
.listDirection(Axis.Vertical)
// .listDirection(Axis.Horizontal)
.lanes(2, 5) // 2列 距离为5
.alignListItem(ListItemAlign.Center)
// .alignListItem(ListItemAlign.End)
// .alignListItem(ListItemAlign.Start)
.scrollBarColor(BarState.Auto)
.divider({
  strokeWidth: 2,		//分割线宽度为2
  color: Color.Blue,	//分割线的
})

五、环形图标组件

Gauge 是一个环形的进度条组件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考文档:

Gauge

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alfredorw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值