GroupLayout布局管理器介绍

合集下载

Android-UI布局管理相关知识

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介绍

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⽅⾯关于布局管理器的使⽤;⼀、基本概念Qt 提供了⼏种在窗⼝部件上管理⼦窗⼝部件的基本⽅式。

⼀共有3 种⽅法⽤于管理窗体上⼦窗⼝部件的布局:绝对位置法、⼈⼯布局法和布局管理器法。

相⽐于使⽤固定尺⼨和位置,布局提供了功能强⼤且极具灵活性的另⼀种⽅案。

使⽤布局后,编程⼈员⽆需计算尺⼨和位置,布局可以⾃动进⾏调整,符合⽤户屏幕、语⾔以及字体的要求。

1.绝对位置法这种⽅法是最原始的拖放窗⼝部件的⽅法。

它对窗体的各个⼦窗⼝部件分配固定的⼤⼩和位置,是通过调⽤基类QWidget 提供的setGeometry()函数来实现的。

所以绝对位置法有很多缺点:1> ⽤户⽆法改变窗⼝的⼤⼩,当⽗窗⼝改变时,⼦窗⼝不能做出相应的调整。

2>如果⽤户选择的字体太⼤或者翻译成多国语⾔,特别是俄语,很多都会显⽰不全被截断。

3> 对于不同风格的平台,这些窗⼝部件可能会具有并不合适的尺⼨⼤⼩。

4>必须⼈⼯计算这些位置和⼤⼩。

这样做不仅⾮常枯燥⽽且极易出错,并且还会让后期的维护⼯作变得痛苦万分。

很显然,使⽤这种⽅式管理GUI 应⽤程序⼤⼤降低了程序员的开发效率,降低了应⽤程序的质量和适应性。

2.⼈⼯布局法这种⽅法的核⼼是通过重载QWidget::resizeEvent(QResizeEvent*)函数来使得⼦窗⼝的的⼤⼩尺⼨总是和⽗窗⼝的⼤⼩成⽐例,也就在⼀定程度上减轻了计算量,但是在其中也要通过setGeometry()函数来设置⼦窗⼝部件的位置和⼤⼩。

在程序的规模⽐较⼩,并且不需要时常变更设计的情况下,绝对位置法勉强可以胜任。

但是它就像前⾯的绝对位置法⼀样,仍然需要计算许多⼿写代码中的常量,尤其是当设计被改变的时候,这种情况更加突出,⽽且它并没有消除⽂本会被截断的危险。

设计图形界面-4.布局管理器

设计图形界面-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炫酷用法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。

布局管理器

布局管理器
Complex GUIs often require multiple panels to arrange their components properly
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 layout 工作原理Qt是一种跨平台的应用程序开发框架,它提供了丰富的工具和功能,帮助开发人员轻松创建各种类型的应用程序。

Qt的布局管理器是一种用于管理应用程序中的控件布局的机制。

在本文中,我们将深入探讨Qt布局管理器的工作原理。

布局是指应用程序中控件的排列方式。

Qt提供了多种布局管理器,包括水平布局、垂直布局、网格布局等。

布局管理器允许开发人员在不同的容器中自由组合和调整控件的位置和大小,以适应不同窗口大小和分辨率的需求。

Qt的布局管理器基于盒子模型的概念。

每个容器都是一个矩形盒子,可以包含一个或多个控件。

布局管理器根据容器的大小和设置的规则来调整控件的位置和大小。

开发人员只需将控件添加到布局管理器中,布局管理器将自动处理控件的排列和调整。

布局管理器使用了一套规则来确定控件的位置和大小。

这些规则可以通过代码或可视化界面编辑器进行设置。

布局管理器将根据容器的大小和设置的规则,计算出每个控件的位置和大小,并自动进行调整。

这样,无论窗口的大小如何改变,控件的位置和大小都会自动适应。

Qt的布局管理器还提供了一些特殊功能,例如伸缩因子和对齐方式。

伸缩因子可以用来控制控件在布局中的比例,从而实现不同控件之间的伸缩效果。

对齐方式可以用来控制控件在容器中的对齐方式,例如居中、左对齐、右对齐等。

布局管理器的工作原理可以分为两个主要步骤:布局计算和布局应用。

在布局计算阶段,布局管理器会根据容器的大小和设置的规则,计算出每个控件在布局中的位置和大小。

在布局应用阶段,布局管理器将根据计算得到的结果,调整每个控件的位置和大小。

布局管理器的工作原理可以总结为以下几个步骤:1. 创建布局管理器对象:首先,需要创建一个布局管理器对象,并将其设置为容器的布局管理器。

2. 添加控件到布局管理器:然后,将需要布局的控件添加到布局管理器中。

可以使用addLayout()、addWidget()等方法来添加控件。

3. 设置布局规则:接下来,需要设置布局管理器的规则,例如控件的对齐方式、伸缩因子等。

qt layout用法

qt layout用法

qt layout用法QT Layout用法什么是QT Layout•QT Layout是QT提供的一种布局管理器,用于在QT界面中管理和控制窗口中的控件的布局和排列。

常用的QT Layout•QHBoxLayout:水平布局,将控件从左到右水平排列。

•QVBoxLayout:垂直布局,将控件从上到下垂直排列。

•QGridLayout:网格布局,将控件按照网格的形式排列。

•QFormLayout:表单布局,用于创建标签-输入框的对应布局。

QHBoxLayout用法•QHBoxLayout是一种水平布局,在水平方向将控件从左到右排列。

•使用方式如下:QHBoxLayout* layout = new QHBoxLayout;layout->addWidget(widget1);layout->addWidget(widget2);layout->addWidget(widget3);setLayout(layout);QVBoxLayout用法•QVBoxLayout是一种垂直布局,在垂直方向将控件从上到下排列。

•使用方式如下:QVBoxLayout* layout = new QVBoxLayout;layout->addWidget(widget1);layout->addWidget(widget2);layout->addWidget(widget3);setLayout(layout);QGridLayout用法•QGridLayout是一种网格布局,可以将控件放置在一个二维网格中。

•使用方式如下:QGridLayout* layout = new QGridLayout;layout->addWidget(widget1, 0, 0); // 第一个参数是要添加的控件,后面两个参数是控件的行和列索引layout->addWidget(widget2, 0, 1);layout->addWidget(widget3, 1, 0);layout->addWidget(widget4, 1, 1);setLayout(layout);QFormLayout用法•QFormLayout是一种表单布局,适用于创建标签-输入框的对应布局。

布局管理器

布局管理器

4. 坐标系


组件在容器中的位置默认情况下采用布局管理 器指定,也可以采用坐标方式指定,当用户不 想使用布局管理器时,可以把容器的布局设置 为null,如p.setLayout(null)。 组件调用setBounds(int x,int y,int width,int height)方法设置该组件在容器中的位置和大小。 参数x,y代表组件的左上角在容器中的位置坐标, width和height分别代表组件的宽和高。
பைடு நூலகம்

4. 坐标系


对JFrame来说,确定其位置的是屏幕坐标系。该坐标 系由一个x坐标(水平坐标)和一个y坐标(垂直坐标) 组成,原点为屏幕左上角坐标(0,0)坐标单位用像素 来度量。 对一般组件来说,其坐标系原点在其所在容器左上角。 当容器位置变化时,组件在容器中的相对位置并不变化。
0 0 (x,y) +y Y 轴 +x X轴
布局管理器
布局管理器负责管理组件在容器中的显示属性, 如:排列顺序,组件的大小、位置等。 不同的布局管理器有不同的策略,容器可以通 过选择不同的布局管理器来决定布局。 常用的布局管理器: (1)FlowLayout 流布局管理器 (2)BorderLayout 边框布局管理器 (3)GridLayout 网格布局管理器

2. BorderLayout 边框布局管理器
BorderLayout是JFrame的默认布局管理器。 BorderLayout布局管理器把容器分成5个区域:东、西、 南、北、中,每次加入一个组件时应指明把组件放置到 哪个区域。 默认情况下,当添加一个组件时,就是将组件添加到容 器的中心。每个区域只能放置一个组件。 构造方法: (1)public BorderLayout():各组件间的间距为0像素。 (2)public BorderLayout(int hgap,int vgap):组件 间的水平间距为hgap个像素,垂直间距为vgap个像素。

《Java基础入门》_课后习题答案大一计算机专业8

《Java基础入门》_课后习题答案大一计算机专业8

《Java基础入门》课后习题答案第8章GUI(图形用户界面)一、填空题1、在Java 中,图形用户界面简称: GUI2、事件监听器: 负责监听事件源上发生的事件,并对各种事件做出响应处理。

3、GUI 设计提供了一些基本的图形用户接口开发工具,如AWT:Swing 和JavaFX。

4、.如果单击Frame窗口有上角的关闭按相能将其关闭:那么这个Frame窗口添加了:WindowListener 监听器,并实现了监听器:windowClosing(WindowEvent e) 的方法。

5、创建下拉式菜单需要使用三个组件,分别是:JMenuBar、JMenu、JMenuItem二、判断题1、容器(Container)是一个可以包含基本组件和其他容器的组件。

对2.可以通过实现AetionListener 接口或者继承AconAdpter 类来实现动作事件监听器。

错3.CardLayout 布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。

对4.非模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口进行交互。

错5.JFrame 的默认布局管理器是FlowLayout。

错三、选择题1.下面四个组件中哪一个不是JComponent 的子类? (B)A.JButtonB.JDialogC. JLabelD.JMenuBar2.下面四个选项中,哪些是事件处理机制中的角色?(多选) (ABD)A.事件B.事件源C.事件接口D.事件监听器3. ActionEvent 的对象会被传递给以下哪个事件处理器方法? (D)A.addChangeListener()B. addActionListener()C. stateChanged()D. actionPerformed()4.下面哪些是FlowLayout 类中表示对齐方式的常量?(多选) (ABD)A.FlowLayout.LEFTB.FlowLayout.CENTERC. FlowLayout. VERTICALD. FlowLayout. RIGHT5.下列选项中关于JavaFX,描述错误的是(C )A.JavaFX是一个强大的图形和多媒体处理工具包集合B. JavaFX 允许开发者来设计、创建、测试、调试和部署客户端程序C.JavaFX不能与Swing实现互操作D.JavaFX可以实现跨平台功能四、简答题1、请简述GUI 中实现事件监听的步骤:●通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写●创建事件源对象和事件监听器对象●调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象2、请简述Swing 中的布局管理器有哪些。

android coordinatorlayout用法

android coordinatorlayout用法

android coordinatorlayout用法一、概述CoordinatorLayout是Android开发中一个非常重要的布局组件,它能够与各种视图组件(如FrameLayout、RelativeLayout等)配合使用,实现更高级的布局效果和交互行为。

在CoordinatorLayout 中,可以通过定义视图容器(如<CoordinatorLayout>、<AppBarLayout>、<RecyclerView>等)以及使用相关联的视图组件(如<ViewStub>、<RelativeLayout>、<Button>等),来实现更灵活、更强大的布局和交互功能。

二、基本用法1. 添加CoordinatorLayout到布局文件中在布局文件中添加<CoordinatorLayout>元素,作为布局的根节点。

2. 定义视图容器在<CoordinatorLayout>中,可以定义一个视图容器,用于放置其他视图组件。

通常可以使用<AppBarLayout>作为视图容器,因为它可以显示标题和图标等元素,并且能够与<CollapsingToolbarLayout>配合使用,实现App标题的缩放效果。

3. 添加相关联的视图组件在视图容器中,可以添加相关联的视图组件,如<ViewStub>、<RelativeLayout>、<Button>等。

这些视图组件可以通过设置layout_behavior属性,与CoordinatorLayout绑定起来,从而获得更丰富的布局和交互功能。

4. 使用布局管理器在CoordinatorLayout中,可以使用布局管理器(如GridLayoutManager、LinearLayoutManager、StaggeredGridLayoutManager等)来控制视图组件的布局行为,实现更复杂的布局效果。

AndroidUI设计之 布局管理器

AndroidUI设计之 布局管理器

AndroidUI设计之布局管理器- 详细解析布局实现写完博客的总结 : 以前没有弄清楚的概念清晰化父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器都有一个LayoutParams内部类, android:... 是父容器用来控制子组件的属性. 如android:layout_gravity 是控制组件本身的对齐方式, android:gravity是控制本容器子组件的对齐方式;布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小;布局管理器之间的继承关系 :在上面的UML图中可以看出, 绝对布局帧布局网格布局相对布局线性布局是直接继承ViewGroup,表格布局是继承的LinearLayout;一. 线性布局(LinearLayout)1. 线性布局作用作用 : 线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件横向或者纵向排列, 通过android:orientation属性控制;不换行属性 : 线性布局中的组件不会自动换行, 如果组件一个一个排列到尽头之后, 剩下的组件就不会显示出来;2. LinearLayout常用属性(1)基线对齐xml属性 : android:baselineAligned;设置方法 : setBaselineAligned(boolean b);作用 : 如果该属性为false, 就会阻止该布局管理器与其子元素的基线对齐;(2)设分隔条xml属性 : android:divider;设置方法 : setDividerDrawable(Drawable);作用 : 设置垂直布局时两个按钮之间的分隔条;(3)对齐方式(控制内部子元素)xml属性 : android:gravity;设置方法 : setGravity(int);作用 : 设置布局管理器内组件(子元素)的对齐方式,支持的属性 :top, bottom, left, right,center_vertical(垂直方向居中), center_horizontal(水平方向居中),fill_vertical(垂直方向拉伸), fill_horizontal(水平方向拉伸),center, fill,clip_vertical, clip_horizontal;可以同时指定多种对齐方式 : 如 left|center_vertical 左侧垂直居中;(4)权重最小尺寸xml属性 : android:measureWithLargestChild;设置方法 : setMeasureWithLargestChildEnable(boolean b);作用 : 该属性为true的时候, 所有带权重的子元素都会具有最大子元素的最小尺寸; (5) 排列方式xml属性 : android:orientation;设置方法 : setOrientation(int i);作用 : 设置布局管理器内组件排列方式, 设置为horizontal(水平),vertical(垂直), 默认为垂直排列;3. LinearLayout子元素控制LinearLayout的子元素, 即LinearLayout中的组件, 都受到youtParams控制, 因此LinearLayout包含的子元素可以执行下面的属性.(1) 对齐方式xml属性 : android:layout_gravity;作用 : 指定该元素在LinearLayout(父容器)的对齐方式, 也就是该组件本身的对齐方式, 注意要与android:gravity区分, ;(2) 所占权重xml属性 : android:layout_weight;作用 : 指定该元素在LinearLayout(父容器)中所占的权重, 例如都是1的情况下, 那个方向(LinearLayout的orientation方向)长度都是一样的;4. 控制子元素排列与在父元素中排列控制本身元素属性与子元素属性 :设备组件本身属性 : 带layout的属性是设置本身组件属性, 例如android:layout_gravity设置的是本身的对其方式;设置子元素属性 : 不带layout的属性是设置其所包含的子元素, 例如android:gravity 设置的是该容器子组件的对齐方式;LayoutParams属性 : 所有的布局管理器都提供了相应的LayoutParams内部类, 这些内部类用于控制该布局本身, 如对齐方式 layout_gravity, 所占权重layout_weight, 这些属性用于设置本元素在父容器中的对齐方式;容器属性 : 在android:后面没有layout的属性基本都是容器属性,android:gravity作用是指定指定本元素包含的子元素的对齐方式, 只有容器才支持这个属性;5. 常见用法(1) 获取LinearLayout的宽高a. 组件外无法获取组件宽高下面的两种情况都是针对 View.getHeight() 和 View.getWidth() 方法 :组件外无法获取 : 调用View.getHeight()和View.getWidth()方法是获取不到组件的宽度和高度的, 这两个方法返回的是0, Android的运行机制决定了无法在组件外部使用getHeight()和getWidth()方法获取宽度和高度;组件内可以获取 : 在自定义的类中可以在View的类中通过调用这两个方法获取该View 子类组件的宽和高;b. 组件外部获取View对象宽高方法外部获取 : 使用View.getMeasuredWidth()和View.getMeasuredHeight()方法可以获取组件的宽和高, 在调用这个方法之前, 必须先调用View.measure()方法, 才可以, 否则也获取不到组件的宽高;注意(特例) : 如果组件宽度或高度设置为 fill_parent, 使用getMeasuredHeight() 等方法获取宽度和高度的时候, 并且组件中含有子元素时, 所获取的实际值是这些组件所占的最小宽度和最小高度.(没看懂)示例:[java]view plaincopy1.View view = getLayoutInflater().inflate(yout.main, null);2.LinearLayout layout = (LinearLayout) view.findViewById(R.id.linearlayout);3.//调用测量方法, 调用了该方法之后才能通过getMeasuredHeight()等方法获取宽高yout.measure(0, 0);5.//获取宽度6.int width = layout.getMeasuredWidth();7.//获取高度8.int height = layout.getMeasuredHeight();c. 获取布局文件中组件的宽高从LayoutParams中获取 : 调用View.getLayoutParams().width 和View.getLayoutParams().height 获取宽高, 如果宽高被设定为 fill_parent, match_parent, warp_content 时, 这两个两边直接回返回 FILL_PARENT,MATCH_PARENT, WARP_CONTENT常量值;规律 : 从View.getLayoutParams()中获取 width, height 值, 在布局xml文件中设置的是什么, 获取的时候就得到的是什么;(2) 在LinearLayout中添加分隔线a. 使用ImageView添加(低版本3.0以下)垂直布局横向宽度填满 : 如果布局是vertical, 那么设置一个ImageView宽度fill_parent, 高度2dp, 设置一个背景色;水平布局纵向高度填满 : 如果布局时horizontal, 那么设置一个ImageView宽度2dp, 高度fill_parent, 设置一个背景色;[java]view plaincopy1.<ImageView2. android:layout_width="fill_parent"3. android:layout_height="2dp"4. android:background="#F00"/>b. 使用xml属性添加(3.0以上版本)设置LinearLayout标签的android:showDividers属性, 该属性有四个值 : none :不显示分隔线;beginning : 在LinearLayout开始处显示分隔线;middle : 在LinearLayout中每两个组件之间显示分隔线;end : 在LinearLayout结尾处显示分隔线;设置android:divider属性, 这个属性的值是一个Drawable的id;c. 使用代码添加(3.0以上版本)设置显示分隔线样式 : linearLayout.setShowDividers(), 设置android:showDividers属性;设置分隔线图片 : linearLayout.setDividerDrawable(), 设置android:divider属性;6. 实际案例(1) 按钮排列要点 :底部 + 水平居中对齐属性 : 左边的LinearLayout的android:gravity 属性为bottom|center_horizontal;右部 + 垂直居中对齐属性 : 右边的LinearLayout的android:gravity 属性为right|center_vertical;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="vertical"6.android:gravity="bottom|center_horizontal">7.<Button8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:text="按钮1"/>11.<Button12.android:layout_width="wrap_content"13.android:layout_height="wrap_content"14.android:text="测试按钮2"/>15.<Button16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:text="按钮3"/>19.<Button20.android:layout_width="wrap_content"21.android:layout_height="wrap_content"22.android:text="测试按钮4"/>23.<Button24.android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:text="按钮5"/>27.</LinearLayout>子元素对齐 : 通过修改android:gravity 属性来控制LinearLayout中子元素的排列情况;左边的图的属性为 bottom|center_horizontal , 右边的android:gravity的属性值为 right|center_vertical;(2) 三个按钮各自对齐三个水平方向的按钮, 分别左对齐, 居中对齐, 右对齐 :要点 :水平线性布局 : 最顶层的LinearLayout的orientation是horizontal水平的;等分三个线性布局 : 第二层的LinearLayout的orientation是vertical垂直的, 并且宽度是fill_parent , 依靠权重分配宽度;设置按钮对齐方式 : 按钮的android:layout_gravity属性根据需求 left, center, right, 默认为left;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="horizontal">6.7.<LinearLayout8.android:layout_width="fill_parent"9.android:layout_weight="1"10.android:layout_height="wrap_content"11.android:orientation="vertical"12.android:background="#f00">13.<Button android:layout_width="wrap_content"14.android:layout_height="wrap_content"15.android:text="按钮1"/>16.</LinearLayout>17.18.<LinearLayout19.android:layout_width="fill_parent"20.android:layout_weight="1"21.android:layout_height="wrap_content"22.android:orientation="vertical"23.android:background="#0f0">24.<Button android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:text="按钮2"27.android:layout_gravity="center"/>28.</LinearLayout>29.30.<LinearLayout31.android:layout_width="fill_parent"32.android:layout_weight="1"33.android:layout_height="wrap_content"34.android:orientation="vertical"35.android:background="#00f">36.<Button android:layout_width="wrap_content"37.android:layout_height="wrap_content"38.android:text="按钮3"39.android:layout_gravity="right"/>40.</LinearLayout>41.42.</LinearLayout>二. 相对布局RelativeLayout相对布局容器中, 子组件的位置总是相对兄弟组件,父容器来决定的;1. RelativeLayout支持的属性(1) 对齐方式xml属性 : android:gravity;设置方法 : setGravity(int);作用 : 设置布局容器内子元素的对齐方式, 注意与android:layout_gravity区分, 后者是设置组件本身元素对齐方式;(2) 忽略对齐方式xml属性 : android:ignoreGravity;设置方法 : setIgnoreGravity(int);作用 : 设置该组件不受gravity属性影响, 因为gravity属性影响容器内所有的组件的对齐方式, 设置了之后, 该组件就可以例外;2. LayoutParams属性(1) 只能设置boolean值的属性这些属性都是相对父容器的, 确定是否在父容器中居中(水平, 垂直), 是否位于父容器的上下左右端;是否水平居中 : android:layout_centerHorizontal;是否垂直居中 : android:layout_centerVertical;是否位于中央 : android:layout_centerInParent;是否底端对齐 : android:layout_align ParentBottom;是否顶端对齐 : android:layout_align ParentTop;是否左边对齐 : android:layout_align ParentLeft;是否右边对齐 : android:layout_align ParentRight;(2) 只能设置其它组件id的属性位于所给id组件左侧 : android:layout_toLeftOf;位于所给id组件右侧 : android:layout_toRightOf;位于所给id组件的上边 : android:layout_above;位于所给id组件的下方 : android:layout_below;与所给id组件顶部对齐 : android:layout_align Top;与所给id组件底部对齐 : android:layout_align Bottom;与所给id组件左边对齐 : android:layout_align Left;与所给id组件右边对齐 : android:layout_align Right;3. 梅花布局效果五个按钮排成梅花形状, 梅花处于正中心, 效果图如下 :两个按钮, 如果只有 android:layout_above="@+id/bt1" 会是这种情况 :加上 android:layout_alignLeft="@+id/bt1"就会成为这种情况 :要点 :注意每个组件的属性, 先要确定方位, 在进行对齐, 组件左边界对齐, 组件上边界对齐;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<RelativeLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent">5.6.<Button7.android:id="@+id/bt1"8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:text="按钮1"11.android:layout_centerInParent="true"/>12.13.<Button14.android:id="@+id/bt2"15.android:layout_width="wrap_content"16.android:layout_height="wrap_content"17.android:text="按钮2"18.android:layout_above="@+id/bt1"19.android:layout_alignLeft="@+id/bt1"/>20.21.<Button22.android:id="@+id/bt3"23.android:layout_width="wrap_content"24.android:layout_height="wrap_content"25.android:text="按钮3"26.android:layout_centerInParent="true"27.android:layout_below="@+id/bt1"28.android:layout_alignLeft="@+id/bt1"/>29.30.<Button31.android:id="@+id/bt4"32.android:layout_width="wrap_content"33.android:layout_height="wrap_content"34.android:text="按钮4"35.android:layout_centerInParent="true"36.android:layout_toLeftOf="@+id/bt1"37.android:layout_alignTop="@+id/bt1"/>38.39.<Button40.android:id="@+id/bt5"41.android:layout_width="wrap_content"42.android:layout_height="wrap_content"43.android:text="按钮5"44.android:layout_centerInParent="true"45.android:layout_toRightOf="@+id/bt1"46.android:layout_alignTop="@+id/bt1"/>47.48.</RelativeLayout>4. 相对布局常用方法(1) 获取屏幕中一个组件的位置创建数组 : 要先创建一个整型数组, 数组大小2位; 这个数组传入getLocationOnScreen()方法;将位置信息传入数组 : 可以调用View.getLocationOnScreen()方法, 返回的是一个数组 int[2], int[0] 是横坐标, int[1] 是纵坐标;[java]view plaincopy1.//获取组件2.Button b = (Button) this.findViewById(R.id.Button01);3.//创建数组, 将该数组传入getLocationOnScreen()方法4.int locations[] = new int[2];5.//获取位置信息6. b.getLocationOnScreen(locations);7.//获取宽度8.int width = locations[0];9.//获取高度10.int height = locations[1];(2) LayoutParams的使用设置所有属性属性设置方法少 : Android SDK中View类只提供了很少用于设置属性的方法,大多数属性没有直接对应的获得和设置属性值的方法, 看起来貌似不是很好用;使用LayoutParams设置属性值 : Android中可以对任何属性进行设置, 这里我们需要一个LayoutParams对象, 使用这个LayoutParams.addRule()方法, 可以设置所有组件的属性值; 设置完之后调用View.setLayoutParams()方法, 传入刚才创建的LayoutParams对象, 并更新View的相应的LayoutParams属性值, 向容器中添加该组件;代码中动态设置布局属性 :a. 创建LayoutParams对象b. 调用LayoutParams对象的addRule()方法设置对应属性;c. 调用View.setLayoutParams()方法将设置好的LayoutParams对象设置给组件;d. 调用addView方法将View对象设置到布局中去;使用代码设置android:layout_toRightOf 和 android:layout_below属性 :[java]view plaincopy1.//装载布局文件2.RelativeLayout relativeLayout = (RelativeLayout) getLayoutInflater().inflate(yout.relative, null);3.//装载要动态添加的布局文件4.Button button = (Button) relativeLayout.findViewById(R.id.bt1);5.//创建一个LayoutParams对象youtParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);7.//设置android:layout_toRightOf属性youtParams.addRule(RelativeLayout.RIGHT_OF, R.id.bt2);9.//设置android:layout_belowyoutParams.addRule(RelativeLayout.BELOW, R.id.bt2);11.//更新Button按钮的属性12.button.setLayoutParams(layoutParams);13.//向布局中动态添加按钮14.relativeLayout.addView(button);三. 帧布局FrameLayout帧布局容器为每个组件创建一个空白区域, 一个区域成为一帧, 这些帧会根据FrameLayout中定义的gravity属性自动对齐;1. 绘制霓虹灯布局绘制一个霓虹灯效果的层叠布局, 如下图 :要点 :后挡前 : 后面的View组件会遮挡前面的View组件,越在前面, 被遮挡的概率越大;界面居中 : 将所有的TextView组件的对齐方式 android:layout_gravity设置为center;正方形 : 所有的TextView都设置android:height 和 android:width 属性, 用来设置其宽高, 这里设置成正方形, 宽高一样, 后面的组件比前面的边长依次少40;颜色 : 每个TextView的背景都设置成不一样的;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<FrameLayout xmlns:android="/apk/res/android"3.android:layout_width="match_parent"4.android:layout_height="match_parent">5.6.<TextView7.android:id="@+id/tv_1"8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:layout_gravity="center"11.android:width="320px"12.android:height="320px"13.android:background="#f00"/>14.<TextView15.android:id="@+id/tv_2"16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:layout_gravity="center"19.android:width="280px"20.android:height="280px"21.android:background="#0f0"/>22.<TextView23.android:id="@+id/tv_3"24.android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:layout_gravity="center"27.android:width="240px"28.android:height="240px"29.android:background="#00f"/>30.<TextView31.android:id="@+id/tv_4"32.android:layout_width="wrap_content"33.android:layout_height="wrap_content"34.android:layout_gravity="center"35.android:width="200px"36.android:height="200px"37.android:background="#ff0"/>38.<TextView39.android:id="@+id/tv_5"40.android:layout_width="wrap_content"41.android:layout_height="wrap_content"42.android:layout_gravity="center"43.android:width="160px"44.android:height="160px"45.android:background="#f0f"/>46.<TextView47.android:id="@+id/tv_6"48.android:layout_width="wrap_content"49.android:layout_height="wrap_content"50.android:layout_gravity="center"51.android:width="120px"52.android:height="120px"53.android:background="#0ff"/>54.55.</FrameLayout>.作者 :万境绝尘转载请注明出处 : /shulianghan/article/details/18964835 .2. 使用代码使上面的霓虹灯效果动起来(1) 图片效果(2) 颜色资源创建颜色资源, 在跟节点<resources>下面创建<color>子节点, color属性标签name 自定义, 子文本为颜色代码;(3) 定时器控制handler创建Handler对象, 实现handleMessage()方法, 在这个方法中循环设置 TextView 对象的颜色变量, 使用color[(i + currentColor)%colors.length]每调用一次, 就将所有的TextView颜色依次调换一次;在onCreate()方法中, 开启一个定时器Timer, 每隔0.2s就调用一个handler中的方法, 这样动态的霓虹灯代码就显示出来了.(4) 代码颜色资源代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<resources>3.<color name = "color1">#f00</color>4.<color name = "color2">#0f0</color>5.<color name = "color3">#00f</color>6.<color name = "color4">#ff0</color>7.<color name = "color5">#f0f</color>8.<color name = "color6">#0ff</color>9.</resources>代码 :[java]view plaincopy1.package com.example.framelayout;2.3.import java.util.Timer;4.import java.util.TimerTask;5.6.import android.app.Activity;7.import android.os.Bundle;8.import android.os.Handler;9.import android.os.Message;10.import android.widget.TextView;11.12.public class MainActivity extends Activity {13.14.//这个变量用来控制霓虹灯颜色变化15.private int currentColor = 0;16.//颜色对应的资源id17.final int[] colors = new int[]{18. R.color.color1,19. R.color.color2,20. R.color.color3,21. R.color.color4,22. R.color.color5,23. R.color.color624. };25.//View组件对应的资源id26.final int[] names = new int[]{27. _1,28. _2,29. _3,30. _4,31. _5,32. _633. };34.35.//组件数组36. TextView[] views = new TextView[names.length];37.38.//定义这个Handler, 为了在定时器中固定调用handleMessage方法39. Handler handler = new Handler(){40.public void handleMessage(Message msg) {41.if(msg.what == 0x123){42.for(int i = 0; i < names.length; i ++){43. views[i].setBackgroundResource(colors[(i + currentColor)% names.length]);44. }45. currentColor ++;46. }47. };48. };49.50.@Override51.public void onCreate(Bundle savedInstanceState) {52.super.onCreate(savedInstanceState);53. setContentView(yout.frame);54.//初始化组件数组55.for(int i = 0; i < names.length; i ++){56. views[i] = (TextView) findViewById(names[i]);57. }58.//每隔0.2秒更换一次颜色59.new Timer().schedule(new TimerTask() {60.@Override61.public void run() {62. handler.sendEmptyMessage(0x123);63. }64. }, 0, 200);65. }66.}3. 三个水平方向的按钮分别左对齐,居中对齐,右对齐要点 : 给FrameLayout中的三个按钮分别设置不同的layout_gravity,left ,center_horizontal,right, 就能设置成上图的样式;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<FrameLayout xmlns:android="/apk/res/android"3.android:layout_width="match_parent"4.android:layout_height="match_parent">5.6.<Button7.android:layout_width="wrap_content"8.android:layout_height="wrap_content"9.android:text="按钮1"10.android:layout_gravity="left"/>11.12.<Button13.android:layout_width="wrap_content"14.android:layout_height="wrap_content"15.android:text="按钮2"16.android:layout_gravity="center_horizontal"/>17.18.<Button19.android:layout_width="wrap_content"20.android:layout_height="wrap_content"21.android:text="按钮3"22.android:layout_gravity="right"/>23.24.</FrameLayout>四. 表格布局TableLayout1. 表格布局的一些概念继承关系 : 表格布局继承了LinearLayout, 其本质是线性布局管理器;控制组件 : 表格布局采用行, 列形式管理子组件, 但是并不需要声明有多少行列, 只需要添加TableRow 和组件就可以控制表格的行数和列数, 这一点与网格布局有所不同, 网格布局需要指定行列数;增加行的方法 :a. TableRow增加行列 : 向TableLayout中添加一个TableRow,一个TableRow就是一个表格行, 同时TableRow也是容器, 可以向其中添加子元素, 每添加一个组件, 就增加了一列;b. 组件增加行 : 如果直接向TableLayout中添加组件, 就相当于直接添加了一行;列宽 : TableLayout中, 列的宽度由该列最宽的单元格决定, 整个表格的宽度默认充满父容器本身;2. 单元格行为方式(1) 行为方式概念a. 收缩 :Shrinkable, 如果某列被设为Shrinkable, 那么该列所有单元格宽度可以被收缩, 保证表格能适应父容器的宽度;b. 拉伸 :Stretchable, 如果某列被设为Stretchable, 那么该列所有单元格的宽度可以被拉伸, 保证表格能完全填满表格剩余空间;d. 隐藏 :Collapsed, 如果某列被设置成Collapsed, 那么该列所有单元格会被隐藏;(2) 行为方式属性a. 隐藏xml属性 : android:collapsedColumns;设置方法 : setColumnCollapsed(int, boolean);作用 : 设置需要被隐藏的列的序号, 在xml文件中, 如果隐藏多列, 多列序号间用逗号隔开;b. 拉伸xml属性 : android:stretchColumns;设置方法 : setStretchAllColumns(boolean);作用 : 设置允许被拉伸的列的序列号, xml文件中多个序列号之间用逗号隔开;c. 收缩xml属性 : android:shrinkableColumns;设置方法 : setShrinkableAllColumns(boolean);作用 : 设置允许被收缩的列的序号, xml文件中, 多个序号之间可以用逗号隔开; 3. 表格布局实例实现要点 :独自一行按钮 : 向TableLayout中添加按钮, 这个按钮就会独自占据一行;收缩按钮: 在TableLayout标签中,设置android:stretchable属性标签, 属性值是要收缩的列,注意,列标从0开始;拉伸按钮 : 在TableLayout标签中,设置android:shrinkable属性标签, 属性值是要拉伸的列, 注意, 列表从0开始;代码 :[html]view plaincopy1.<LinearLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:orientation="vertical"4.android:layout_width="match_parent"5.android:layout_height="match_parent">6.<!-- LinearLayout默认是水平的, 这里设置其方向为垂直 -->7.8.<!-- 表格布局, 第2列允许收缩, 第3列允许拉伸, 注意这里行列的计数都是从0开始的 -->9.<TableLayout10.android:layout_width="fill_parent"11.android:layout_height="wrap_content"12.android:shrinkColumns="1"13.android:stretchColumns="2">14.15.<!-- 向TableLayout中直接添加组件, 独占一行 -->16.<Button17.android:layout_width="fill_parent"18.android:layout_height="wrap_content"19.android:text="独自一行的按钮"/>20.21.<TableRow>22.<Button23.android:layout_width="wrap_content"24.android:layout_height="wrap_content"25.android:text="普通的按钮"/>26.<Button27.android:layout_width="wrap_content"28.android:layout_height="wrap_content"29.android:text="收缩的按钮"/>30.<Button31.android:layout_width="wrap_content"32.android:layout_height="wrap_content"33.android:text="拉伸的按钮"/>34.</TableRow>35.36.</TableLayout>37.38.<!-- 第二个按钮会隐藏掉 -->39.<TableLayout40.android:layout_width="fill_parent"41.android:layout_height="wrap_content"42.android:collapseColumns="1">43.44.<Button45.android:layout_width="fill_parent"46.android:layout_height="wrap_content"47.android:text="独自一行的按钮"/>48.49.<TableRow>50.<Button51.android:layout_width="wrap_content"52.android:layout_height="wrap_content"53.android:text="普通按钮1"/>54.<Button55.android:layout_width="wrap_content"56.android:layout_height="wrap_content"57.android:text="普通按钮2"/>58.<Button59.android:layout_width="wrap_content"60.android:layout_height="wrap_content"61.android:text="普通按钮3"/>62.</TableRow>63.64.</TableLayout>65.66.<!-- 指定第二列和第三列可以被拉伸 -->67.<TableLayout68.android:layout_height="wrap_content"69.android:layout_width="fill_parent"70.android:stretchColumns="1,2">71.72.<Button73.android:layout_width="fill_parent"74.android:layout_height="wrap_content"75.android:text="独自占一行的按钮"/>76.77.<TableRow>78.79.<Button80.android:layout_width="wrap_content"81.android:layout_height="wrap_content"82.android:text="普通按钮1"/>83.<Button84.android:layout_width="wrap_content"85.android:layout_height="wrap_content"86.android:text="拉伸的按钮"/>87.<Button88.android:layout_width="wrap_content"89.android:layout_height="wrap_content"90.android:text="拉伸的按钮"/>91.92.</TableRow>93.94.<TableRow>95.96.<Button97.android:layout_width="wrap_content"98.android:layout_height="wrap_content"99.android:text="普通的按钮"/>100.<Button101.android:layout_width="wrap_content"102.android:layout_height="wrap_content"103.android:text="拉伸的按钮"/>104.105.</TableRow>106.107.</TableLayout>108.109.110.</LinearLayout>五. 网格布局1. 网格布局介绍网格布局时Android4.0版本才有的, 在低版本使用该布局需要导入对应支撑库;GridLayout将整个容器划分成rows * columns个网格, 每个网格可以放置一个组件. 还可以设置一个组件横跨多少列, 多少行. 不存在一个网格放多个组件情况;2. 网格布局常用属性(1) 设置对齐模式xml属性 : android:alignmentMode;设置方法 : setAlignmentMode(int);作用 : 设置网格布局管理器的对齐模式(2) 设置列数xml属性 : android:columnCount;设置方法 : setColumnCount(int);作用 : 设置该网格布局的列数;(3) 设置是否保留列序列号xml属性 : android:columnOrderPreserved;设置方法 : setColumnOrderPreserved(boolean);作用 : 设置网格容器是否保留列序列号;(4) 设置行数xml属性 : android:rowCount;设置方法 : setRowCount(int);作用 : 设置该网格的行数;(5) 设置是否保留行序列号xml属性 : android:rowOrderPreserved;设置方法 : setRowOrderPreserved(int);作用 : 设置该网格容器是否保留行序列号;(6) 页边距xml属性 : android:useDefaultMargins;设置方法 : setUseDefaultMargins(boolean);作用 : 设置该布局是否使用默认的页边距;3. GridLayout的LayoutParams属性(1) 设置位置列xml属性 : android:layout_column;作用 : 设置子组件在GridLayout的哪一列;(2) 横向跨列xml属性 : android:layout_columnSpan;作用 : 设置该子组件在GridLayout中横向跨几列;(3) 占据空间方式xml属性 : android:layout_gravity;设置方法 : setGravity(int);作用 : 设置该组件采用何种方式占据该网格的空间;(4) 设置行位置xml属性 : android:layout_row;作用 : 设置该子组件在GridLayout的第几行;(5) 设置横跨行数xml属性 : android:layout_rowSpan;作用 : 设置该子组件在GridLayout纵向横跨几行;4. 实现一个计算机界面(1) 布局代码设置行列 : 设置GridLayout的android:rowCount为6, 设置android:columnCount为4, 这个网格为 6行 * 4列的;设置横跨四列 : 设置TextView和按钮横跨四列android:layout_columnSpan 为4, 列的合并就是占了一行;textView的一些设置:设置textView中的文本与边框有5像素间隔 : android:padding = "5px";代码 :[html]view plaincopy1.<GridLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:layout_width="match_parent"4.android:layout_height="match_parent"5.android:rowCount="6"6.android:columnCount="4"7.android:id="@+id/root">8.9. <!--10.定义一个 6行 * 4列 GridLayout, 在里面定义两个组件11.两个组件都横跨4列, 单独占一行12. -->13.<TextView14.android:layout_width="match_parent"15.android:layout_height="wrap_content"16.android:layout_columnSpan="4"17.android:textSize="50sp"18.android:layout_marginLeft="4px"19.android:layout_marginRight="4px"20.android:padding="5px"21.android:layout_gravity="right"22.android:background="#eee"23.android:textColor="#000"24.android:text="0"/>25.26.<Button27.android:layout_width="match_parent"28.android:layout_height="wrap_content"29.android:layout_columnSpan="4"30.android:text="清除"/>31.32.</GridLayout>(2) Activity代码将组件设置给GridLayout网格流程 :指定组件所在行 : GridLayout.Spec rowSpec = GridLayout.spec(int);指定组件所在列 : GridLayout.Spec columnSpec = GridLayout.spec(int);创建LayoutParams对象 : youtParams params =newyoutParams(rowSpec, columnSpec);指定组件占满容器 : params.setGravity(Gravity.FILL);将组件添加到布局中 : gridLayout.addView(view, params);代码 :[java]view plaincopy1.package com.example.caculator;2.3.import android.app.Activity;4.import android.os.Bundle;5.import android.view.Gravity;6.import android.widget.Button;7.import android.widget.GridLayout;8.import youtParams;9.import android.widget.GridLayout.Spec;10.11.public class MainActivity extends Activity {12.13.private GridLayout gridLayout;14.//需要放到按钮上的字符串15. String chars[] = new String[]{16."7", "8", "9", "/",17."4", "5", "6", "*",18."1", "2", "3", "-",19.".", "0", "=", "+"20. };21.。

Java图形化界面设计——布局管理器BorderLayout(边界布局)

Java图形化界面设计——布局管理器BorderLayout(边界布局)

• • • • • • • • • • • • • • • • • • • • • • •
实例1: // BorderLayoutDemo.java import javax.swing.*; import java.awt.*; public class BorderLayoutDemo extends JFrame { public BorderLayoutDemo(){ //构造函数,初始化对象值 //设置为边界布局,组件间横向、纵向间距均为5像素 setLayout(new BorderLayout(5,5)); setFont(new Font("Helvetica", Font.PLAIN, 14)); getContentPane().add("North", new JButton("North")); //将按钮添加到窗口中 getContentPane().add("South", new JButton("South")); getContentPane().add("East", new JButton("East")); getContentPane().add("West", new JButton("West")); getContentPane().add("Center",new JButton("Center")); } public static void main(String args[]) { BorderLayoutDemo f = new BorderLayoutDemo(); f.setTitle("边界布局"); f.pack(); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); //让窗体居中显示 }

Java的swing.GroupLayout布局管理器的使用方法和实例(转)

Java的swing.GroupLayout布局管理器的使用方法和实例(转)

Java的swing.GroupLayout布局管理器的使⽤⽅法和实例(转) The following builds a panel consisting of two labels in one column, followed by two textfields in the next column:JComponent panel = ...;GroupLayout layout = new GroupLayout(panel);panel.setLayout(layout);// Turn on automatically adding gaps between componentslayout.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);GroupLayout是⼀个LayoutManager,它将组件按层次分组,以决定它们在Container中的位置。

GroupLayout讲解2

GroupLayout讲解2

GroupLayout讲解2它将组件按层次分组,以决定它们在 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。

Java SE 6 中包含一个新的GroupLayout ,从GroupLayout的单词意思来看,它是以Group(组)为单位来管理布局,也就是把多个组件(如:JLable、JButton)按区域划分到不同的Group(组),再根据各个Group(组)相对于水平轴(Horizontal)和垂直轴(Vertical)的排列方式来管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 的创建方法替代。

相关文档
最新文档