HarmonyOS 鸿蒙Next ArkUI api9 金刚区的UI有类似组件或者思路不?

HarmonyOS 鸿蒙Next ArkUI api9 金刚区的UI有类似组件或者思路不?

cke_220.png

/**
 * 金刚区组件
 */
@Component
export struct NavigationKong {
  public configData: ComponentAttribute;
  private swiperController: SwiperController = new SwiperController()
  private pageData:any = []

  aboutToAppear(){
    let pageSize: number = 10
    let result = this.chunk(this.configData.data.config.list,pageSize)
    this.pageData = result
    console.log("result====>",result.length)
    console.log("result====>this.pageData",this.pageData.length)
  }

  chunk(array, size) {
    //获取数组的长度,如果你传入的不是数组,那么获取到的就是undefined
    const length = array.length;
    //判断不是数组,或者size没有设置,size小于1,就返回空数组
    if (!length || !size || size < 1) {
      return [];
    }
    let index = 0; //用来表示切割元素的范围start
    let resIndex = 0; //用来递增表示输出数组的下标
    //根据length和size算出输出数组的长度,并且创建它。
    let result = new Array(Math.ceil(length / size));
    //进行循环
    while (index < length) {
      //循环过程中设置result[0]和result[1]的值。该值根据array.slice切割得到。
      result[resIndex++] = array.slice(index, (index += size));
    }
    return result;
  }

  build() {
    Column() {
      Swiper(this.swiperController) {
        ForEach(this.pageData, (item: any) => {
          Grid() {
            ForEach(item, (dataItem: any) => {
              GridItem(){
                Column(){
                  Image(dataItem.imgUrl)
                    .width(42)
                    .height(42)
                    .onClick(() => {

                    })
                  Text(dataItem.navName)
                    .fontSize(16)
                    .textAlign(TextAlign.Center)
                }
              }
            }, dataItem => dataItem.navName)
          }
          .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
          .maxCount(5)
          .columnsGap(10)
          .rowsGap(10)
          .width('100%')
          .backgroundColor(0xFAEEE0)

        }, item => item)
      }
      .index(0)
      .autoPlay(true)
      .indicator(true)
      .loop(true)
      .itemSpace(0)
      .curve(Curve.Linear)
      .onChange((index: number) => {
        console.info(index.toString())
      })
    }.width('100%')
  }
}

class ComponentAttribute {
  public data: any
}

cke_961.png

目前我写的不太行啊,本来是有2页的,我输出的长度都是对的。但就是有问题,不知道这种UI有组件么?


更多关于HarmonyOS 鸿蒙Next ArkUI api9 金刚区的UI有类似组件或者思路不?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

自我解决了。。。去掉for里面的item => item就OK了

更多关于HarmonyOS 鸿蒙Next ArkUI api9 金刚区的UI有类似组件或者思路不?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS的ArkUI API 9中,金刚区(Jin Gang Area)是一种常见的UI设计模式,通常用于展示核心功能或快捷入口。ArkUI提供了多种组件和布局方式来实现类似金刚区的UI效果。

  1. Grid组件:ArkUI的Grid组件可以用于创建类似金刚区的布局。Grid允许你定义行和列,将多个子组件按照网格形式排列。可以通过设置Grid的行列数、间距等属性来调整布局,使其符合金刚区的设计需求。

  2. Flex布局:ArkUI的Flex布局也是一种常用的布局方式,可以通过设置justifyContentalignItems属性来实现灵活的子组件排列。Flex布局适合用于金刚区中的动态内容排列,尤其是当金刚区的功能入口数量不固定时。

  3. Stack组件:Stack组件允许子组件堆叠在一起,可以通过设置position属性来控制子组件的位置。Stack组件可以用于在金刚区中实现一些特殊的视觉效果,如图标与文字的叠加。

  4. List组件:虽然List组件主要用于展示列表数据,但通过自定义列表项的布局,也可以实现类似金刚区的效果。例如,可以将多个功能入口作为列表项展示,并通过设置列表项的样式来模拟金刚区的布局。

  5. 自定义组件:如果ArkUI提供的标准组件无法完全满足需求,开发者可以基于这些组件进行封装,创建自定义组件。通过自定义组件,可以实现更加复杂和灵活的金刚区UI效果。

总的来说,ArkUI API 9提供了多种组件和布局方式,开发者可以根据具体需求选择合适的组件来实现类似金刚区的UI设计。通过组合和自定义这些组件,可以创建出符合设计要求的金刚区界面。

回到顶部