鸿蒙OS中UI界面的基本布局:Column和Row的详细介绍与使用

举报
Y-StarryDreamer 发表于 2024/07/25 10:56:05 2024/07/25
【摘要】 项目介绍与发展随着物联网和智能设备的普及,操作系统的角色愈加重要。华为在2019年推出的鸿蒙操作系统(HarmonyOS)正是为此而生。它不仅是一个手机操作系统,更是一个支持多设备、多场景的分布式操作系统。鸿蒙OS的设计目标是提供跨设备无缝互联的体验,从而实现“1+8+N”的全场景智慧生活战略。随着版本的迭代,鸿蒙OS逐渐完善,成为一个覆盖手机、平板、智能手表、智能家居等多个终端的统一操作...

项目介绍与发展

随着物联网和智能设备的普及,操作系统的角色愈加重要。华为在2019年推出的鸿蒙操作系统(HarmonyOS)正是为此而生。它不仅是一个手机操作系统,更是一个支持多设备、多场景的分布式操作系统。鸿蒙OS的设计目标是提供跨设备无缝互联的体验,从而实现“1+8+N”的全场景智慧生活战略。随着版本的迭代,鸿蒙OS逐渐完善,成为一个覆盖手机、平板、智能手表、智能家居等多个终端的统一操作系统。鸿蒙OS的发布不仅是技术上的突破,也是华为在全球科技领域的重要布局。

在鸿蒙OS中,UI布局是开发应用的重要部分。本文将详细介绍鸿蒙OS中两个基本的UI布局:Column和Row,并结合实例展示它们的使用方法。

Column和Row的概述

在鸿蒙OS中,Column和Row是两个最基本的布局方式,它们分别用于垂直和水平排列子组件。这两种布局方式类似于安卓中的LinearLayout,但更加简洁和灵活。

I. Column的概述

Column
Column是鸿蒙OS中用于垂直排列子组件的布局方式。使用Column布局时,所有子组件会按照添加的顺序从上到下排列。Column布局可以包含多个子组件,每个子组件都可以设置不同的宽度、高度和对齐方式。

II. Row的概述

Row
Row是鸿蒙OS中用于水平排列子组件的布局方式。使用Row布局时,所有子组件会按照添加的顺序从左到右排列。Row布局同样可以包含多个子组件,每个子组件都可以设置不同的宽度、高度和对齐方式。

Column和Row的主要区别

Column和Row的主要区别在于子组件的排列方向。Column用于垂直排列子组件,而Row用于水平排列子组件。在具体使用时,可以根据需要选择合适的布局方式。

使用示例

下面我们通过几个简单的示例,展示如何在鸿蒙OS中使用Column和Row布局。

III. 创建项目

  1. 创建项目

    • 打开DevEco Studio,创建一个新的HarmonyOS项目,选择“Empty Ability”模板。
  2. 定义布局文件

    • src/main/resources/base/layout目录下,创建两个布局文件ability_column.xmlability_row.xml

IV. Column布局示例

  1. 定义Column布局文件
    • ability_column.xml中定义Column布局。
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical"
    ohos:alignment="center">

    <Text
        ohos:id="$+id:hello_text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Hello from Column"
        ohos:text_size="50fp"
        ohos:alignment="center" />

    <Button
        ohos:id="$+id:click_button"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Click Me"
        ohos:text_size="20fp"
        ohos:alignment="center" />
</DirectionalLayout>
  1. 编写Column Ability代码
    • src/main/java/com/example/myapp目录下,创建一个ColumnAbility.java文件。
package com.example.myapp;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import com.example.myapp.slice.ColumnAbilitySlice;

public class ColumnAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(ColumnAbilitySlice.class.getName());
    }
}
  1. 编写Column Ability Slice代码
    • src/main/java/com/example/myapp/slice目录下,创建一个ColumnAbilitySlice.java文件。
package com.example.myapp.slice;

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Text;
import ohos.agp.window.service.ToastDialog;
import com.example.myapp.ResourceTable;

public class ColumnAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_column);

        Text helloText = (Text) findComponentById(ResourceTable.Id_hello_text);
        helloText.setText("Hello from Column");

        Button clickButton = (Button) findComponentById(ResourceTable.Id_click_button);
        clickButton.setClickedListener(component -> new ToastDialog(getContext())
                .setText("Button Clicked")
                .show());
    }
}

V. Row布局示例

  1. 定义Row布局文件
    • ability_row.xml中定义Row布局。
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="horizontal"
    ohos:alignment="center">

    <Text
        ohos:id="$+id:hello_text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Hello from Row"
        ohos:text_size="50fp"
        ohos:alignment="center" />

    <Button
        ohos:id="$+id:click_button"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Click Me"
        ohos:text_size="20fp"
        ohos:alignment="center" />
</DirectionalLayout>
  1. 编写Row Ability代码
    • src/main/java/com/example/myapp目录下,创建一个RowAbility.java文件。
package com.example.myapp;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import com.example.myapp.slice.RowAbilitySlice;

public class RowAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(RowAbilitySlice.class.getName());
    }
}
  1. 编写Row Ability Slice代码
    • src/main/java/com/example/myapp/slice目录下,创建一个RowAbilitySlice.java文件。
package com.example.myapp.slice;

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Text;
import ohos.agp.window.service.ToastDialog;
import com.example.myapp.ResourceTable;

public class RowAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_row);

        Text helloText = (Text) findComponentById(ResourceTable.Id_hello_text);
        helloText.setText("Hello from Row");

        Button clickButton = (Button) findComponentById(ResourceTable.Id_click_button);
        clickButton.setClickedListener(component -> new ToastDialog(getContext())
                .setText("Button Clicked")
                .show());
    }
}

代码详细解释

VI. Column布局的详细解释

  1. Column布局文件(ability_column.xml)

    • DirectionalLayout:这是一个方向性布局容器,可以垂直或水平排列子组件。在Column布局中,我们将方向设置为垂直(vertical)。
    • Text:文本组件,用于显示文本内容。我们设置了文本内容为“Hello from Column”,文本大小为50fp,并将其对齐方式设置为居中。
    • Button:按钮组件,用于响应用户点击事件。我们设置了按钮文本为“Click Me”,文本大小为20fp,并将其对齐方式设置为居中。
  2. Column Ability代码(ColumnAbility.java)

    • Ability:这是鸿蒙OS中Ability的基类,类似于安卓的Activity。
    • onStart方法:Ability启动时调用的方法,在这里设置了主路由为ColumnAbilitySlice
  3. Column Ability Slice代码(ColumnAbilitySlice.java)

    • AbilitySlice:这是鸿蒙OS中的一个重要概念,用于管理UI和用户交互。它是UI的一个独立单元,可以独立处理用户交互。
    • onStart方法:Ability Slice启动时调用的方法,在这里设置了UI内容为我们定义的Column布局文件,并获取了Text和Button组件。我们设置了Text组件的文本内容,并为Button组件设置了点击事件监听器,点击按钮时会显示一个ToastDialog。

VII. Row布局

的详细解释

  1. Row布局文件(ability_row.xml)

    • DirectionalLayout:这是一个方向性布局容器,可以垂直或水平排列子组件。在Row布局中,我们将方向设置为水平(horizontal)。
    • Text:文本组件,用于显示文本内容。我们设置了文本内容为“Hello from Row”,文本大小为50fp,并将其对齐方式设置为居中。
    • Button:按钮组件,用于响应用户点击事件。我们设置了按钮文本为“Click Me”,文本大小为20fp,并将其对齐方式设置为居中。
  2. Row Ability代码(RowAbility.java)

    • Ability:这是鸿蒙OS中Ability的基类,类似于安卓的Activity。
    • onStart方法:Ability启动时调用的方法,在这里设置了主路由为RowAbilitySlice
  3. Row Ability Slice代码(RowAbilitySlice.java)

    • AbilitySlice:这是鸿蒙OS中的一个重要概念,用于管理UI和用户交互。它是UI的一个独立单元,可以独立处理用户交互。
    • onStart方法:Ability Slice启动时调用的方法,在这里设置了UI内容为我们定义的Row布局文件,并获取了Text和Button组件。我们设置了Text组件的文本内容,并为Button组件设置了点击事件监听器,点击按钮时会显示一个ToastDialog。

总结

通过本文的详细介绍和实例演示,我们了解了鸿蒙OS中两个基本的UI布局:Column和Row。Column用于垂直排列子组件,而Row用于水平排列子组件。我们通过实际的代码示例展示了如何使用这两种布局,并详细解释了代码的每个部分。

鸿蒙OS中的UI布局设计灵活且简洁,开发者可以根据需要选择合适的布局方式,快速构建出高质量的用户界面。希望本文能为您在鸿蒙OS开发中的UI布局设计提供一些帮助和启发。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。