ohos_flowlayout:基于 OpenHarmony 的流式布局组件项目

扩展线性布局,当当前行没有空间时,会包装其内容。

分支1Tags0

流式布局(FlowLayout)

简介

流式布局(FlowLayout)是一款用于实现流式布局的组件,支持水平与垂直方向的布局,同时也支持RTL布局方向。本库基于FlowLayout原库进行适配,以确保其能够在OpenHarmony系统上运行,并沿用了原库现有的使用方法与特性。

下载安装

ohpm install @ohos/flowlayout

OpenHarmony ohpm环境配置等更多内容,请参考 如何安装OpenHarmony ohpm包

使用说明

导入组件

import {
  FlowLayout,
  LayoutParams,
  Gravity,
  HORIZONTAL,
  VERTICAL,
  LAYOUT_DIRECTION_LTR,
  LAYOUT_DIRECTION_RTL
} from '@ohos/flowlayout';

基本使用

@Entry
@Component
struct MyPage {
  // 定义子元素布局参数数组
  @State layoutParamsArray: LayoutParams[] = [];

  aboutToAppear(): void {
    // 初始化子元素
    const items: LayoutParams[] = [];

    // 创建子元素,宽100,高50
    const item1 = new LayoutParams(100, 50);
    item1.setMargin(4);  // 设置四周边距为4
    items.push(item1);

    // 创建更多子元素...
    const item2 = new LayoutParams(80, 50);
    item2.setMargin(4);
    items.push(item2);

    this.layoutParamsArray = items;
  }

  // 定义子元素构建器
  @Builder
  itemBuilderFunc(index: number, layoutParams: LayoutParams): void {
    Button('Item ' + index.toString())
      .fontSize(12)
      .width('100%')
      .height('100%')
  }

  build() {
    Column() {
      FlowLayout({
        layoutParamsArray: this.layoutParamsArray,
        orientation: HORIZONTAL,
        gravity: Gravity.LEFT | Gravity.TOP,
        layoutDirection: LAYOUT_DIRECTION_LTR,
        itemBuilder: this.itemBuilderFunc.bind(this)
      })
    }
    .width('100%')
    .height('100%')
  }
}

接口说明

FlowLayout 组件属性

属性名 类型 默认值 说明
layoutParamsArray LayoutParams[] [] 子元素布局参数数组
orientation number HORIZONTAL 布局方向:HORIZONTAL(0) 或 VERTICAL(1)
layoutDirection number LAYOUT_DIRECTION_LTR 排列方向:LAYOUT_DIRECTION_LTR(0) 或 LAYOUT_DIRECTION_RTL(1)
gravity number Gravity.LEFT | Gravity.TOP 对齐方式
weightDefault number 0 默认权重值
debugDraw boolean false 是否开启调试绘制
maxLines number 0 最大行数限制 0=不限制
paddingLeft number 0 左内边距
paddingTop number 0 上内边距
paddingRight number 0 右内边距
paddingBottom number 0 下内边距
itemBuilder (index: number, layoutParams: LayoutParams) => void - 子元素构建器

LayoutParams 类

属性名 类型 默认值 说明
width number 80 宽度
height number 40 高度
leftMargin number 0 左边距
topMargin number 0 上边距
rightMargin number 0 右边距
bottomMargin number 0 下边距
orientation number HORIZONTAL 布局方向
方法名 参数 说明
setMargin(margin) number 设置四周边距为相同值
setGravity(gravity) number 设置子元素对齐方式
getGravity() - 获取子元素对齐方式
setWeight(weight) number 设置权重值
getWeight() - 获取权重值
setNewLine(newLine) boolean 设置是否强制换行
isNewLine() - 获取是否强制换行
constructor() width?: number, height?: number 构造函数

Gravity 对齐常量

常量名 说明
Gravity.NO_GRAVITY 0x0000 无重力设置
Gravity.LEFT 0x0003 左对齐
Gravity.TOP 0x0030 顶部对齐
Gravity.RIGHT 0x0005 右对齐
Gravity.BOTTOM 0x0050 底部对齐
Gravity.CENTER_VERTICAL 0x0010 垂直居中
Gravity.CENTER_HORIZONTAL 0x0001 水平居中
Gravity.CENTER 0x0011 水平垂直居中
Gravity.FILL_VERTICAL 0x0070 垂直填充
Gravity.FILL_HORIZONTAL 0x0007 水平填充
Gravity.FILL 0x0077 完全填充
Gravity.START 0x00800003 起始侧对齐(支持RTL)
Gravity.END 0x00800005 结束侧对齐(支持RTL)

说明:源库提供的 FlowLayoutManager 是适配 RecyclerView 的管理器,RecyclerView 是安卓特有视图,用于优化性能,鸿蒙没有该视图,因此不涉及 FlowLayoutManager 的实现。

约束与限制

在下述版本验证通过:

  • DevEco Studio NEXT Developer Beta3: (5.0.3.530), SDK: API12 (5.0.0.35(SP3))

目录结构

|---- ohos_flowlayout  
|     |---- entry  # 示例代码文件夹
|     |---- library  # flowlayout库文件夹
|     |     |---- src
|     |     |     └── main  
|     |     |         └── ets
|     |     |             └── components
|     |     |                 |---- FlowLayout.ets  # 流式布局组件
|     |     |                 |---- Gravity.ets  # 对齐常量定义
|     |     |                 |---- LayoutParams.ets  # 布局参数类
|     |     |                 └── LineDefinition.ets  # 行定义类
|     |     |---- Index.ets  # 对外接口
|     |---- README.md  # 英文说明
|     |---- README_zh.md  # 中文说明

贡献代码

使用过程中发现任何问题都可以提 Issue ,当然,也非常欢迎发 PR 共建。

开源协议

本项目基于 Apache License 2.0 ,请自由地享受和参与开源。

项目介绍

扩展线性布局,当当前行没有空间时,会包装其内容。

定制我的领域

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新

语言类型

ArkTS99.48%
TypeScript0.52%