第5章 布局 【学习目标】 ■ 理解HarmonyOS应用中的布局 ■ 掌握布局创建的两种基本方法 ■ 掌握常用的布局,如DirectionalLayout、DependentLayout、StackLayout、TableLayout、PositionLayout等 ■ 了解自定义布局及组件继承体系 10min 5.1布局概述 在HarmonyOS的UI框架中,布局其实就是组件容器。组件是为了解决在界面上放什么的问题,而布局则是为了解决怎么放的问题。我们可以把用户看到的界面看成一个大容器,容器中可以放置组件,也可以放置小的容器。 放置在用户界面中的布局(组件容器)和组件结构可以用树表示,树根是一个布局,里面包含组件和子布局,子布局中又包含组件或布局。实际上,组件容器可以理解成特殊的组件,这样用户界面中的元素就形成了一棵组件树,如图51所示,根据这种规律,设计者可以设计出丰富的界面效果。 图51组件树 组件树只是说明了应用界面中组件容器和组件之间的逻辑关系,为了更好地理解,可以把设备屏幕理解成一个矩形框。用户界面中的组件树结构如图52所示,这样就可以更容易地和设备中的应用界面对应。 图52用户界面中的组件树结构 尽管根据图52更容易把组件树结构和应用界面联系在一起,但是,同一个组件树在屏幕中放置组件的位置还没有确定。如果不进行一定的设定或约束,则势必会造成界面凌乱。布局可以很好地组织界面中的元素,使应用界面组织更有序、更丰富多彩。 Java UI框架关于组件和组件容器提供了Component和ComponentContainer两个类,前者称为组件,后者称为组件容器。实际上,ComponentContainer类继承自Component类,因此,组件容器是特殊的组件。 正如Text、Button、Image等继承自Componet的具体组件一样,组件容器也有常用的具体组件容器,如DirectionalLayout、DependentLayout、StackLayout等,这些具体的组件容器一般以Layout结尾,故通常称为布局。 每种布局都有自己的特点,根据自身特点提供了布局配置,通过布局配置为布局中的组件设定布局属性和参数。布局通过设置属性对包含在其中的子组件进行布置和约束,进而使应用界面的效果达到设计要求。 在布局文件代码方面,组件树是以XML文件方式组织的,布局属性是和XML标签属性对应的,图52对应的XML文件的结构如下: 5.2创建布局方式 创建布局有两种基本方式,一种方式是通过XML布局文件加载布局,另外一种方式是通过系统提供的布局类创建布局对象。 1. 通过XML文件加载布局 通过XML声明布局的方式简便直观。XML文件本身就是一个树形结构的标签文档,系统支持的每种布局都可以用XML标签表示,布局的属性可以通过设置XML标签的属性表示。 定义方向布局(DirectionalLayout),代码如下: