GroupLayout布局管理器介绍
Android-UI布局管理相关知识

• • • • • • • • •
其对应strings.xml内容如下: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, UIActivity!</string> <string name="app_name">用户界面</string> <string name="name_text">请输入用户名</string> <string name="ok_button">确定</string> <string name="cancle_button">取消</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="0,1,2,3" > <TableRow> <TextView android:text="@string/name" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/gender" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/age" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/phonenum" android:gravity="center" android:padding="3dip" /> </TableRow> <TableRow>
Layouts介绍

Layouts介绍Layout管理器(⼀般称“layouts”)是ViewGroup的扩展,被设计⽤来控制⼦控件在屏幕上的位置。
Layouts能相互嵌套,通过Layout管理器的结合,你可以创建任意复杂的界⾯。
Android SDK包含⼀些简单的Layout,帮助你构建UI。
选择layout间正确的结合来使界⾯易于理解和使⽤就取决于你咯。
下⾯的列表包含了⼀些更通⽤的layout类:❑ FrameLayout最简单的layout管理器,FrameLayout简单地将每⼀个View显⽰在左上⾓。
增加多个⼦View时,新的View位于先前的上⽅,并且还遮盖先前的View。
❑ LinearLayoutLinearLayout⽤来沿着某⼀个直线⽅向增加⼦View,包括垂直的和⽔平的。
垂直的layout每⼀⾏有⼀个孩⼦;⽽⽔平的layout只有⼀⾏。
LinearLayout可以为每个⼦View指定“weight”,来控制在可获得的空间⾥每个⼦View的相对⼤⼩。
❑ RelativeLayout使⽤RelativeLayout,你可以定义每个⼦View相对于其它的View或屏幕边界的位置。
❑ TableLayoutTableLayout允许你按照⽹格的⾏列来放置View。
每格可以占据多个⾏和列,并且列可以设定为缩⼩或增长。
❑ AbsoluteLayout在AbsoluteLayout⾥,每个⼦View的位置以绝对坐标进⾏定义。
使⽤这个类,你可以为组件安排最精确的布局,但是有代价的。
与之前的管理器⽐较⽽⾔,以绝对的坐标来定义layout意味着你的layout不能为不同的屏幕分辨率和⽅向进⾏动态调整。
Android⽂档详细的描述了每个layout的特性和属性,所以不在这⾥重复说明,我建议你可以参见:在这章的后⾯,你会学习到如何通过扩展这些layout类来创建组合的控件(widget由⼀些互相联系的View组成)。
Qt布局管理器

Qt布局管理器在⼀个颜值当道的今天,⽆论买⾐服,买车还是追星,颜值的⾼低已经变成了⼤家最看重的(不管男性⼥性都⼀样,千万别和我说你不是);⽽对于程序猿来说,开发⼀款软件,不再只注重逻辑和稳定性,美观和⽤户友好性也是我们不得不关注的⼀个重点了。
我们进⼊正题,今天主要和⼤家分享⼀下Qt⽅⾯关于布局管理器的使⽤;⼀、基本概念Qt 提供了⼏种在窗⼝部件上管理⼦窗⼝部件的基本⽅式。
⼀共有3 种⽅法⽤于管理窗体上⼦窗⼝部件的布局:绝对位置法、⼈⼯布局法和布局管理器法。
相⽐于使⽤固定尺⼨和位置,布局提供了功能强⼤且极具灵活性的另⼀种⽅案。
使⽤布局后,编程⼈员⽆需计算尺⼨和位置,布局可以⾃动进⾏调整,符合⽤户屏幕、语⾔以及字体的要求。
1.绝对位置法这种⽅法是最原始的拖放窗⼝部件的⽅法。
它对窗体的各个⼦窗⼝部件分配固定的⼤⼩和位置,是通过调⽤基类QWidget 提供的setGeometry()函数来实现的。
所以绝对位置法有很多缺点:1> ⽤户⽆法改变窗⼝的⼤⼩,当⽗窗⼝改变时,⼦窗⼝不能做出相应的调整。
2>如果⽤户选择的字体太⼤或者翻译成多国语⾔,特别是俄语,很多都会显⽰不全被截断。
3> 对于不同风格的平台,这些窗⼝部件可能会具有并不合适的尺⼨⼤⼩。
4>必须⼈⼯计算这些位置和⼤⼩。
这样做不仅⾮常枯燥⽽且极易出错,并且还会让后期的维护⼯作变得痛苦万分。
很显然,使⽤这种⽅式管理GUI 应⽤程序⼤⼤降低了程序员的开发效率,降低了应⽤程序的质量和适应性。
2.⼈⼯布局法这种⽅法的核⼼是通过重载QWidget::resizeEvent(QResizeEvent*)函数来使得⼦窗⼝的的⼤⼩尺⼨总是和⽗窗⼝的⼤⼩成⽐例,也就在⼀定程度上减轻了计算量,但是在其中也要通过setGeometry()函数来设置⼦窗⼝部件的位置和⼤⼩。
在程序的规模⽐较⼩,并且不需要时常变更设计的情况下,绝对位置法勉强可以胜任。
但是它就像前⾯的绝对位置法⼀样,仍然需要计算许多⼿写代码中的常量,尤其是当设计被改变的时候,这种情况更加突出,⽽且它并没有消除⽂本会被截断的危险。
设计图形界面-4.布局管理器

6
举例:FlowLayout 常用方法
int getHgap()//返回组件的水平间隔 void setHgap(int hgap) ()//设定组件的水平间隔 int getVgap() //返回组件的垂直间隔 void setVgap(int hgap) //设定组件的垂直间隔 int getAlignment() //返回组件的对齐方式 void setAlignment(int align) //设定组件的对齐方式
13
null
称为无布局管理器。 可以随心所欲安排容器,但是跨平台时,可能发生变 化。
14
布局管理器-小结
小 结: 1.JFrame是一个顶级窗口。JFrame的缺省布局管理器为BorderLayout。 2.JPanel 无法单独显示,必须添加到某个容器中。 JPanel 的缺省布局 管理器为FlowLayout。 setBounds(x,y,weigh 3.当把JPanel 作为一个组件添加到某个容器中后,该JPanel 仍然可以有 ,heigh) 自己的布局管理器。因此,可以利用JPanel 使得BorderLayout 中某个区 设定窗体的位置和大小, 域显示多个组件,达到设计复杂用户界面的目的 其中x,y为左上角的坐 。 4.如果采用无布局管理器 setLayout(null),则必须使用 标,weight和height为 weight height setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置, 宽度和高度 此方法会导致平台相关,不鼓励使用。
第13章 Swing程序设计 ——常用布局管理器
1
本单元内容
复习组件JLabel JButton JToggleButton、JCheckBox 布局管理器 常用布局管理器 绝对布局 null 流布局 FlowLayout 边界布局 BorderLayout 网格布局 GridLayout
布局管理器

布局管理器布局管理器是软件开发领域中一种重要的工具,用于管理用户界面的布局和组件的位置。
通过使用布局管理器,开发人员可以更加灵活和高效地创建和管理用户界面,使其具有良好的可读性和可扩展性。
本文将从布局管理器的基本概念、常见类型以及使用布局管理器时的注意事项等方面进行探讨。
一、布局管理器的基本概念布局管理器是一种用于安排和管理用户界面组件位置和大小的工具。
它的主要功能是根据开发人员的要求和设定,自动地对用户界面进行布局,使其符合开发人员的设计需求。
布局管理器基于一系列布局规则和算法,帮助开发人员快速而方便地实现用户界面的布局。
二、常见的布局管理器类型1. 流式布局管理器(FlowLayout):流式布局管理器是一种最简单、最常用的布局管理器之一。
它按照组件的添加顺序,将组件一行一行地排列,如果一行排不下,则自动换行。
流式布局管理器适用于需要按照添加顺序进行排列的界面。
2. 边界布局管理器(BorderLayout):边界布局管理器将用户界面分为五个区域:北、南、东、西和中。
开发人员可以将组件放置在指定的区域内,边界布局管理器将根据区域的大小和组件的大小来确定组件的位置。
3. 网格布局管理器(GridLayout):网格布局管理器将用户界面划分为规则的网格,每个网格可以放置一个组件。
网格布局管理器可以根据开发人员的要求来设定每个网格的大小和组件之间的间距。
4. 卡片布局管理器(CardLayout):卡片布局管理器允许在同一区域内放置多个组件,但只显示其中的一个。
开发人员可以通过切换卡片来显示不同的组件,从而实现界面的切换效果。
5. 网格袋布局管理器(GridBagLayout):网格袋布局管理器是一种功能强大的布局管理器,可以实现高度定制化的用户界面布局。
它通过将组件放置在网格袋中,并设定组件在网格袋内的位置和大小来控制布局。
三、使用布局管理器的注意事项1. 理解各种布局管理器的特点和适用场景,根据实际需要选择合适的布局管理器。
coordinatorlayout炫酷用法

coordinatorlayout炫酷用法CoordinatorLayout 是 Android Support Library 中的一个布局容器,它可以实现复杂而炫酷的布局效果。
它是为了解决子视图之间协调和交互的问题而设计的。
CoordinatorLayout 使用了一个特殊的机制来协调子视图的行为和交互效果。
它通过实现 "Coordinator" 的接口,来管理子视图之间的协作和交互。
通过 CoordinatorLayout,我们可以实现一些非常酷炫的效果,比如折叠布局、滑动效果、切换效果等等。
下面我们来介绍一些常见的 CoordinatorLayout 的炫酷用法:1. 折叠布局(Collapsing Toolbar)折叠布局是 CoordinatorLayout 的一种经典用法,它可以实现一个滑动过程中标题栏折叠效果。
在 CoordinatorLayout 中,我们可以通过使用 CollapsingToolbarLayout、AppBarLayout 和 Toolbar 组合来实现这一效果。
用户在滑动屏幕时,标题栏可以有不同的状态,比如展开、折叠、中间状态等等。
2. 悬浮按钮(Floating Action Button)悬浮按钮是 Material Design 中的一个重要组件,它可以提供一些常用的操作入口。
在 CoordinatorLayout 中,我们可以使用FloatingActionButton 作为一个浮动动作按钮,它可以随着滚动视图的滑动而进行展开和折叠。
我们可以通过设置 Fab 的动画效果和交互效果来实现一些很酷的效果。
3. 嵌套滑动(Nested Scroll)CoordinatorLayout 还支持嵌套滑动的功能,它可以实现当一个视图作为另一个滑动视图的一部分时,能够根据滑动的变化来进行相应的操作。
比如,我们可以实现一个带有 TabLayout 的页面,在滑动页面的时候,可以自动切换 Tab。
布局管理器

13
练习
Implements interface LayoutManager2 Provides horizontal gap spacing and
vertical gap spacing
7
BorderLayout Demo
11.17.3 GridLayout
GridLayout
Divides container into a grid Every component has the same width and
height
9
GridLayout Demo
其它布局
BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout GroupLayout SpringLayout
绝对布局
Set the container's layout manager to null by calling setLayout(null).
Default for JFrames (and other windows). Arranges the components into five areas: NORTH, SOUTH, EAST, WEST and CENTER.
Arranges the components into rows and colrderLayout GridLayout
Default for javax.swing.JPanel. Places components sequentially (left to right) in the order they were added. It is also possible to specify the order of the components by using the Container method add, which takes a Component and an integer index position as arguments.
qt layout 工作原理

qt layout 工作原理Qt是一种跨平台的应用程序开发框架,它提供了丰富的工具和功能,帮助开发人员轻松创建各种类型的应用程序。
Qt的布局管理器是一种用于管理应用程序中的控件布局的机制。
在本文中,我们将深入探讨Qt布局管理器的工作原理。
布局是指应用程序中控件的排列方式。
Qt提供了多种布局管理器,包括水平布局、垂直布局、网格布局等。
布局管理器允许开发人员在不同的容器中自由组合和调整控件的位置和大小,以适应不同窗口大小和分辨率的需求。
Qt的布局管理器基于盒子模型的概念。
每个容器都是一个矩形盒子,可以包含一个或多个控件。
布局管理器根据容器的大小和设置的规则来调整控件的位置和大小。
开发人员只需将控件添加到布局管理器中,布局管理器将自动处理控件的排列和调整。
布局管理器使用了一套规则来确定控件的位置和大小。
这些规则可以通过代码或可视化界面编辑器进行设置。
布局管理器将根据容器的大小和设置的规则,计算出每个控件的位置和大小,并自动进行调整。
这样,无论窗口的大小如何改变,控件的位置和大小都会自动适应。
Qt的布局管理器还提供了一些特殊功能,例如伸缩因子和对齐方式。
伸缩因子可以用来控制控件在布局中的比例,从而实现不同控件之间的伸缩效果。
对齐方式可以用来控制控件在容器中的对齐方式,例如居中、左对齐、右对齐等。
布局管理器的工作原理可以分为两个主要步骤:布局计算和布局应用。
在布局计算阶段,布局管理器会根据容器的大小和设置的规则,计算出每个控件在布局中的位置和大小。
在布局应用阶段,布局管理器将根据计算得到的结果,调整每个控件的位置和大小。
布局管理器的工作原理可以总结为以下几个步骤:1. 创建布局管理器对象:首先,需要创建一个布局管理器对象,并将其设置为容器的布局管理器。
2. 添加控件到布局管理器:然后,将需要布局的控件添加到布局管理器中。
可以使用addLayout()、addWidget()等方法来添加控件。
3. 设置布局规则:接下来,需要设置布局管理器的规则,例如控件的对齐方式、伸缩因子等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GroupLayout布局管理器介绍
GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在Container 中的位置。
GroupLayout 主要供生成器使用,但也可以手工编码。
分组由Group类的实例来完成。
GroupLayout 支持两种组。
串行组 (sequential group) 按顺序一个接一个地放置其子元素。
并行组 (parallel group) 能够以四种方式对齐其子元素。
每个组可以包含任意数量的元素,其中元素有 Group、Component 或间隙 (gap)。
间隙可被视为一个具有最小大小、首选大小和最大大小的不可见组件。
此外,GroupLayout 还支持其值取自 LayoutStyle 的首选间隙。
元素类似于一个弹簧。
每个元素都有一个范围,由最小大小、首选大小和最大大小指定。
间隙的范围由开发人员指定,或者由 LayoutStyle 确定。
Component 的范围通过 Component 的 getMinimumSize、getPreferredSize 和getMaximumSize 方法确定。
此外,添加 Component 时,可以指定使用一个特定范围,而不使用该组件的范围。
Group 的范围由组的类型确定。
ParallelGroup 的范围是其元素范围的最大值。
SequentialGroup 的范围是其元素范围的总和。
GroupLayout 将每个轴 (axis) 单独对待。
也就是说,存在一个表示水平轴的组和一个表示垂直轴的组。
水平组负责确定沿水平轴的最小大小、首选大小和最大大小,并设置所包含组件的 x 和宽度。
垂直组负责确定沿垂直轴的最小大小、首选大小和最大大小,并设置所包含组件的 y 和高度。
每个 Component 都必须同时存在于水平组和垂直组中,否则,在布局过程中或者在请求最小大小、首选大小或最大大小时,将抛出 IllegalStateException。
下图显示了一个沿水平轴的串行组。
该串行组包含三个组件。
沿垂直轴使用了一个并行组。
为了强调要单独对待每个轴,该图显示了沿每个轴的每个组和元素的范围。
每个组件的范围已被投射到轴上,两个组分别呈现为蓝色(水平)和红色(垂直)。
为了便于理解,串行组中的每个元素之间都有一个间隙。
沿水平轴的串行组呈现为蓝色实线。
注意,串行组是它所包含的子元素的总和。
沿垂直轴,并行组是每个组件高度的最大值。
由于三个组件的高度都相同,所以并行组具有相同的高度。
下图显示了与上图中相同的三个组件,但并行组沿水平轴,串行组沿垂直轴。
由于 c1 在三个组件中最大,所以并行组的大小被确定为 c1。
由于 c2 和 c3 小于 c1,所以将根据为组件指定的对齐方式(如果已指定)或并行组的默认对齐方式将它们对齐。
在该图中,c2 和 c3 是使用 LEADING 的对齐方式创建的。
如果组件的方向是从右到左,那么 c2 和 c3 的位置将在相反的一侧对齐(沿右侧对齐)。
下图显示了沿水平和垂直两个轴的串行组。
GroupLayout 提供在 Component 之间插入间隙的能力。
间隙的大小由LayoutStyle 的实例确定。
可以使用 setAutoCreateGaps 方法进行此操作。
类似地,可以使用 setAutoCreateContainerGaps 方法在触到父容器边缘的组件和容器之间插入间隙。
以下代码构建了一个面板,该面板由两列构成,第一列中有两个标签,第二列中有两个文本字段:
JComponent panel = ...;
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
// Turn on automatically adding gaps between components
layout.setAutoCreateGaps(true);
// Turn on automatically creating gaps between components that touch // the edge of the container and the container.
layout.setAutoCreateContainerGaps(true);
// Create a sequential group for the horizontal axis.
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
// The sequential group in turn contains two parallel groups.
// One parallel group contains the labels, the other the text fields. // Putting the labels in a parallel group along the horizontal axis // positions them at the same x location.
//
// Variable indentation is used to reinforce the level of grouping. hGroup.addGroup(layout.createParallelGroup().
addComponent(label1).addComponent(label2));
hGroup.addGroup(layout.createParallelGroup().
addComponent(tf1).addComponent(tf2));
layout.setHorizontalGroup(hGroup);
// Create a sequential group for the vertical axis.
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
// The sequential group contains two parallel groups that align
// the contents along the baseline.The first parallel group contains // the first label and text field, and the second parallel group contains // the second label and text field.By using a sequential group
// the labels and text fields are positioned vertically after one another. vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label1).addComponent(tf1));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE). addComponent(label2).addComponent(tf2));
layout.setVerticalGroup(vGroup);
运行代码时,将出现下面的窗口。
此布局由以下部分组成。
∙水平轴由一个包含两个并行组的串行组组成。
第一个并行组包含标签,第二个并行组包含文本字段。
∙垂直轴由一个包含两个并行组的串行组组成。
并行组被配置为沿基线对齐其组件。
第一个并行组包含第一个标签和第一个文本字段,第二个并行组
包含第二个标签和第二个文本字段。
在这段代码中,要注意几个问题:
∙不需要显式地将组件添加到容器;通过使用 Group 的一个 add 方法间接完成此操作。
∙各种 add 方法返回调用者。
这使得调用能很方便地进行链接。
例如,group.addComponent(label1).addComponent(label2); 等效于
group.addComponent(label1); group.addComponent(label2);。
∙Group 没有公共构造方法;请使用 GroupLayout 的创建方法替代。