HarmonyOS 鸿蒙Next Stack中的控件布局,如何让一个在左上角,一个在右上角

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Stack中的控件布局,如何让一个在左上角,一个在右上角

Stack() {
Image($r(“app.media.img_empty_avatar”))
.width(“13.6%”)
.align(Alignment.TopStart)
Image($r(“app.media.pic_frame_gm”))
.width(“17.333%”)
.align(Alignment.BottomEnd)

}.width(“100%”) .height(“100%”) .margin({ bottom: 10 })

Stack中的控件,如何让一个在左上角,一个在右上角。<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>


更多关于HarmonyOS 鸿蒙Next Stack中的控件布局,如何让一个在左上角,一个在右上角的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

RelativeContainer的高度可以设置为.height('auto'),根据子组件的高度来决定RelativeContainer的高度,但是属性.height('auto')在RelativeContainer被作为锚点时是不生效的,如果想RelativeContainer的高度自动你可以参考如下代码:

[@Entry](/user/Entry)

@Component

struct Page1 {

  @State message: string = ‘Hello World’;

  build() {

    RelativeContainer() {

      Row(){}

      .id(‘aa’)

      Image($r(“app.media.app_icon”))

        .id(‘img1’)

        .width(“13.6%”)

        .align(Alignment.TopStart)

        .alignRules({

          left:{anchor: “aa”, align: HorizontalAlign.Start}

        })

        Row(){}.width(‘82.667%’).alignRules({top:{

          anchor:‘img1’,align:VerticalAlign.Bottom

        }

        }).id(‘bb’)

      .border({width:1})

      Image($r(“app.media.app_icon”))

        .width(“17.333%”)

        .alignRules({

          left:{anchor: “bb”, align: HorizontalAlign.End},

          top:{anchor:‘bb’,align:VerticalAlign.Top}

        })

    }.width(“100%”)

    .border({width:1})

    .margin({ bottom: 10 })

    .height(‘auto’)

  }

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

此时的RelativeContainer高度由image撑开

在stack中实现一左一右可参考如下代码:

@Entry

@Component

struct Page2 {

  @State message: string = ‘Hello World’;

  build() {

Stack(){

  Row(){

    Image($r(“app.media.app_icon”))

      .id(‘img1’)

      .width(“13.6%”)

    Image($r(“app.media.app_icon”))

      .width(“17.333%”)

  }.width(‘100%’).justifyContent(FlexAlign.SpaceBetween)

}

    .width(‘100%’)

  }

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

```

在Stack或RelativeContainer中不借助另外的容器组件是无法实现的

你可以使用borderRadius属性来设置圆形图片,示例demo如下:

@Entry

@Component

struct Page2 {

  @State message: string = ‘Hello World’;

  build() {

Column(){

    Image($r(“app.media.app_icon”))

      .id(‘img1’)

      .width(100)

      .height(100)

      .borderRadius(50)

}

    .width(‘100%’)

  }

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next Stack中的控件布局,如何让一个在左上角,一个在右上角的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next Stack中,控件布局可以通过使用布局容器(如DirectionalLayout或AbsoluteLayout)来实现精确的位置控制。

若要将一个控件放置在左上角,另一个放置在右上角,可以使用DirectionalLayout结合布局参数来实现。DirectionalLayout支持设置控件的对齐方式,但直接实现左上角和右上角布局可能需要结合权重(weight)或AbsoluteLayout。

使用DirectionalLayout(假设水平方向为主轴)时,可以为第一个控件设置alignment="start"weight="0"(或者不使用weight),并确保其宽度合适(例如width="match_parent"的一部分或固定值)。对于第二个控件,可以使用alignment="end",并同样设置weight="0",确保其宽度也合适。不过,DirectionalLayout本身不支持直接实现绝对定位。

更简单的做法是使用AbsoluteLayout,通过直接设置控件的lefttoprightbottom属性来实现精确定位。例如,将第一个控件的lefttop属性设置为"0dp"(或"0px",根据系统单位),将第二个控件的righttop属性设置为"0dp"(或相应的父容器边界值)。

示例代码(假设使用XML布局):

<AbsoluteLayout>
    <Button left="0dp" top="0dp" /> <!-- 左上角 -->
    <Button right="0dp" top="0dp" /> <!-- 右上角 -->
</AbsoluteLayout>

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部