openharmonyコンテナコンポーネントグリッド

グリッド:「行」と「列」で区切られたセルで構成されるグリッドコンテナで、「項目」を配置するセルを指定することで様々なレイアウトが可能です。

Grid() プロパティ:

columnsTemplate : 現在のグリッド レイアウトの列数を設定するために使用されます。設定されていない場合、デフォルトは 1 列です。たとえば、「1fr 1fr 2fr」は 3 つの列に分割されます。親コンポーネントで許可される幅は 4 つに分割されます。最初の列は 1 部を占め、2 番目の列は 1 シェアを占め、3 番目の列は 2 シェアを占めます。
rowsTemplate : 現在のグリッド レイアウトの行数を設定するために使用されます。設定されていない場合、デフォルトは 1 行です。たとえば、「1fr 1fr 2fr」は 3 行に分割され、親コンポーネントで許可される高さは 4 行に分割されます。 4 等分します。最初の列が 1 部分を占め、2 番目の列が 1 個の部分を占め、3 番目の列が 2 個の部分を占めます。
columnsGap : 列間の間隔を設定するために使用されます。
rowsGap : 行間の間隔を設定するために使用されます。
SDK8 には次の属性があります:
editMode : 編集モードに入るかどうか 編集モードに入るときに、Gird コンポーネント内に GridItem をドラッグ アンド ドロップできます。
layoutDirection : レイアウトの主軸の方向を設定します。現在サポートされている主軸のレイアウト方向は次のとおりです:
    LayoutDirection.Row: 水平方向にレイアウトします。つまり、最初に 1 つの列を埋めてから、次の列を埋めます。
    LayoutDirection.Column: 垂直方向にレイアウトします。つまり、最初に 1 行を埋めてから、次の行を埋めます。
maxCount :layoutDirectionがRowの場合は表示可能な最大行数を示し、layoutDirectionがColumnの場合は表示可能な最大列数を示します。
minCount :layoutDirectionがRowの場合は表示可能な最小行数を示し、layoutDirectionがColumnの場合は表示可能な最小列数を示します。
セルの長さ:layoutDirection が Row の場合は行の高さを表し、layoutDirection が Column の場合は列の幅を表します。
multiSelectable : マウス フレーム選択を有効にするかどうか、false: フレーム選択をオフにする、true: フレーム選択を有効にする。
ragAnimation : GridItem アニメーションのドラッグを有効にするかどうか。
edgeEffection : エッジのスライド エフェクトを設定します。現在サポートされているスライド エフェクトは、EdgeEffect
    Spring: 弾性のある物理アニメーションです。エッジまでスライドした後、初速度またはタッチ イベントに基づいて一定の距離をスライドし続け、放した後にリバウンドすることができます。 。
    なし: 端までスライドしても効果はありません。

効果は次の図に示すとおりです。

コード:

@Entry
@Component
struct GridTest {
  @State Number: String[] = ['0', '1', '2', '3', '4']

  build() {
    Column({ space: 5 }) {
      Grid() {
        ForEach(this.Number, (day: string) => {
          ForEach(this.Number, (day: string) => {
            GridItem() {
              Text(day)
                .fontSize(16)
                .backgroundColor(0xF9CF93)
                .width('100%')
                .height('100%')
                .textAlign(TextAlign.Center)
            }
          }, day => day)
        }, day => day)

      }
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
      .columnsGap(10)
      .rowsGap(10)
      .width('90%')
      .editMode(true)
      .backgroundColor(0xFAEEE0)
      .height(300)

      Text('C_scroll').fontColor(0x000000).fontSize(9).width('90%')
      Grid() {
        ForEach(this.Number, (day) => {
          ForEach(this.Number, (day) => {
            GridItem() {
              Text(day)
                .fontSize(16)
                .backgroundColor(0xF9CF93)
                .width('100%')
                .height(80)
                .textAlign(TextAlign.Center)
            }
          }, day => day)
        }, day => day)
      }
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
      .columnsGap(10)
      .rowsGap(10)
      .onScrollIndex((first: number) => {
        console.info(first.toString())
      })
      .width('90%')
      .backgroundColor(0xFAEEE0)
      .height(300)


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

おすすめ

転載: blog.csdn.net/lplj717/article/details/126249100