Harmony中PositionLayout确切位置布局

14 篇文章 1 订阅
12 篇文章 0 订阅

前言

在PositionLayout中,子组件通过指定准确的x/y坐标值在屏幕上显示。(0, 0)为左上角;当向下或向右移动时,坐标值变大;允许组件之间互相重叠。
在这里插入图片描述
参考文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-layout-positionlayout-0000001062250815

前期准备

我们在项目中新建一个用于验证确切位置布局的页面
在这里插入图片描述
弹出页面中填入相应名称,点击finish完成创建
在这里插入图片描述
创建成功后会有PositionLayout、PositionLayoutSlice和ability_position_layout.xml三个文件生成
在这里插入图片描述
我们将PositionLayoutSlice配置到MainAbility中,使应用一打开就是该页面
MainAbility.java:

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
    }
}

接下开就是PositionLayout的使用了

PositionLayout的使用

我们在页面样式配置文件ability_position_layout.xml中使用PositionLayout组件,并且定义三个子组件如下:

<?xml version="1.0" encoding="utf-8"?>
<PositionLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:id="$+id:position"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:background_element="#3387CEFA">
<Text
    ohos:id="$+id:position_text_1"
    ohos:height="50vp"
    ohos:width="200vp"
    ohos:background_element="#9987CEFA"
    ohos:position_x="100"
    ohos:position_y="20"
    ohos:text="Title"
    ohos:text_alignment="center"
    ohos:text_size="20fp"/>
<Text
    ohos:id="$+id:position_text_2"
    ohos:height="200vp"
    ohos:width="200vp"
    ohos:background_element="#9987CEFA"
    ohos:position_x="20"
    ohos:position_y="150"
    ohos:text="Content"
    ohos:text_alignment="center"
    ohos:text_size="20fp"/>
<Text
    ohos:id="$+id:position_text_3"
    ohos:height="200vp"
    ohos:width="200vp"
    ohos:background_element="#9987CEFA"
    ohos:position_x="180"
    ohos:position_y="400"
    ohos:text="Content"
    ohos:text_alignment="center"
    ohos:text_size="20fp"/>
</PositionLayout>

三个组件中属性的含义为:
ohos:id:组件id
ohos:height:组件高度
ohos:width:组件宽度
ohos:background_element:组件背景色
ohos:position_x:组件左上角X轴位置
ohos:position_y:组件左上角Y轴位置
ohos:text:组件文字内容
ohos:text_alignment:组件文字对齐方式
ohos:text_size:组件文字大小
这时候,可能在ohos:position_x和ohos:position_y有下滑红色波浪线报错,不用管他
在这里插入图片描述
接着我们在模拟器中展示如下:
在这里插入图片描述
我们可以看见组件的位置为相对于父组件左上角位置,且可以相互重叠
我们也可以在Slide里面定义组件的相对位置如下:
PositionLayoutSlice.java:

@Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_position_layout);
        ComponentContainer stackLayout = (ComponentContainer) findComponentById(ResourceTable.Id_position);
        Text textFirst = (Text) findComponentById(ResourceTable.Id_position_text_1);

        stackLayout.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                textFirst.setPosition(0, 100);
            }
        });
    }

代码中,首先我们获取position_text_1组件和父组件position,当我们点击父组件任意地方,该子组件的位置会变为0,100
点击前:
在这里插入图片描述
点击后:
在这里插入图片描述
更多技术交流请加入QQ群
群名称:华为鸿蒙harmonyos开发
群 号:1164091073

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值