HarmonyOS UI组件树里面,子组件怎么获取父组件容器或其他组件的具体尺寸size

HarmonyOS  UI组件树里面,子组件怎么获取父组件容器或其他组件的具体尺寸size。

HarmonyOS
2024-09-25 12:09:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

可以通过getInspectorByKey获取指定id组件的所有属性,getInspectorByKey的返回结果是组件属性列表的JSON字符串。我们需要解析字符串,获取他的rect属性,rect属性是一个长度为2的数组,数组的第一个值是组件左上角的坐标,第二个值是组件右下角的坐标,因此我们也可以获取组件的中心坐标和组件的长宽。

例如:"$rect":"[648.00, 262.00][696.00,360.00]" ,它代表组件左上角到屏幕左边的距离为648px,到屏幕顶部的距离为262px,组件的宽可以通过 696-648 = 48px得出。参考代码:

@Entry  
@Component  
struct Page {  
  @State arr: Array<number> = [1, 2, 3, 4, 6, 7, 8, 9, 10]  
  build() {  
    Column() {  
      List() {  
        ForEach(this.arr, (item: number) => {  
          ListItem() {  
            Text(item.toString())  
              .fontSize(24)  
              .id(item.toString())  
          }.height(100)  
        })  
      }.height('50%')  
      .alignListItem(ListItemAlign.Center)  
      Button('获取组件位置').onClick(() => {  
        let obj = JSON.parse(getInspectorByKey('1'))  
        console.log("demoTest:" + JSON.stringify(obj))  
        let rectInfo = JSON.parse('[' + obj.$rect + ']')  
        console.log("x" + JSON.parse('[' + rectInfo[0] + ']')[0])  
        console.log("y" + JSON.parse('[' + rectInfo[0] + ']')[1])  
        console.log("with" + (JSON.parse('[' + rectInfo[1] + ']')[0] - JSON.parse('[' + rectInfo[0] + ']')[0]))  
        console.log("height" + (JSON.parse('[' + rectInfo[1] + ']')[1] - JSON.parse('[' + rectInfo[0] + ']')[1]))  
      })  
    }  
  }  
}

目前暂无其他方式获取父组件属性,且不能在build方法就直接获取到组件属性。

分享
微博
QQ
微信
回复
2024-09-25 18:08:57
相关问题
组件溢出容器问题
2410浏览 • 1回复 待解决
HarmonyOS 组件怎么调用组件方法
1549浏览 • 1回复 待解决
组件调用组件方法
2561浏览 • 1回复 待解决
组件调用组件方法
1303浏览 • 1回复 待解决
HarmonyOS 组件响应组件事件方法
1109浏览 • 1回复 待解决
HarmonyOS 组件调用组件方法demo
1083浏览 • 1回复 待解决
HarmonyOS 组件超过组件范围
1073浏览 • 1回复 待解决
HarmonyOS 组件超出组件宽度
1145浏览 • 1回复 待解决
HarmonyOS 组件超出组件布局
1201浏览 • 1回复 待解决
HarmonyOS 组件调用组件方法
1098浏览 • 1回复 待解决
组件事件可以传到组件
1696浏览 • 1回复 待解决
设置组件宽度不超出组件
1552浏览 • 1回复 待解决
组件组件传递函数
1216浏览 • 1回复 待解决