2.2UI组件(一)布局管理器

  所有的布局管理器都是ViewGroup的子类。

2.2.1线性布局LinearLayout

  android:orientation:可以控制竖排显示(vertical)或者横排显示(horizontal)

  LInearLayout不会自动换行,一旦屏幕排满之后后面的控件将看不到

  基本上很多布局管理器都提供了相应的LayoutParams内部类,该内部类用于控制他们的子元素使他们都具有android:layout_gravity属性,概述性设置子元素在父容器

  中的对齐方式

  例子

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:gravity="bottom|center_horizontal">
 7     <Button
 8         android:id="@+id/bn1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="@+id/按钮1"
12         />
13     <Button
14         android:id="@+id/bn2"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="@+id/按钮2"
18         />
19     <Button
20         android:id="@+id/bn3"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:text="@+id/按钮3"
24         />
25     <Button
26         android:id="@+id/bn4"
27         android:layout_width="wrap_content"
28         android:layout_height="wrap_content"
29         android:text="@+id/按钮4"
30         />
31     <Button
32         android:id="@+id/bn5"
33         android:layout_width="wrap_content"
34         android:layout_height="wrap_content"
35         android:text="@+id/按钮5"
36         />
37 </LinearLayout>

  android:layout_gravity="bottom|center_vertical"显示效果

  android:gravity="bottom|left"显示效果

  调整android:orientation="vertical"显示效果可以看出部分控件被遮住了(总共添加7个只显示出了5个)

2.2.2表格布局TableLayout

  表格布局继承了LinearLayout,因此他的本质还是线性布局管理器。表格布局采用行/列的形式管理,TableLayout不需要明确指出有多少行多少列

  ,而是通过TableRow或者其他组件来控制表格行数和列数;

  表格布局中单元格的三个属性

  Shrinkable:该列所有单元格可以被收缩,以保证表格适应父容器宽度

  Stretchable:该列所有单元格宽度可以被拉伸,以保证组件能完全填满表格空余空间

  Collapsed:该列所有单元格被隐藏

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     >
 7     <!-- 第一个表格布局,指定第2列允许收缩,第三列允许拉伸 -->
 8     <TableLayout
 9         android:id="@+id/table1"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:shrinkColumns="1"
13         android:stretchColumns="2">
14             <Button
15                 android:id="@+id/bn1"
16                 android:layout_width="wrap_content"
17                 android:layout_height="wrap_content"
18                 android:text="独自一行"
19                 />
20             <TableRow
21                 android:id="@+id/row1">
22                     <Button
23                         android:id="@+id/bn2"
24                         android:layout_width="wrap_content"
25                         android:layout_height="wrap_content"
26                         android:text="普通按钮"
27                         />
28                     <Button
29                         android:id="@+id/bn3"
30                         android:layout_width="wrap_content"
31                         android:layout_height="wrap_content"
32                         android:text="收缩的按钮11111111111111"
33                         />
34                     <Button
35                         android:id="@+id/bn4"
36                         android:layout_width="wrap_content"
37                         android:layout_height="wrap_content"
38                         android:text="拉伸的按钮"
39                         />
40             </TableRow>
41        </TableLayout>
42
43     <!-- 第二个TableLayout 并指定第二列隐藏
44     第一行不使用TableRow 直接添加控件将占满一行
45     第二行使用TableROw添加三个按钮将只显示2个按钮-->
46     <TableLayout
47         android:id="@+id/table2"
48         android:layout_width="match_parent"
49         android:layout_height="wrap_content"
50         android:collapseColumns="1">
51         <Button
52             android:id="@+id/bn21"
53             android:layout_width="wrap_content"
54             android:layout_height="wrap_content"
55             android:text="占满一行"/>
56         <TableRow
57             android:id="@+id/row21"
58             android:layout_width="wrap_content"
59             android:layout_height="wrap_content">
60             <Button
61                 android:id="@+id/bn22"
62                 android:layout_width="wrap_content"
63                 android:layout_height="wrap_content"
64                 android:text="第一个"
65                 />
66              <Button
67                 android:id="@+id/bn23"
68                 android:layout_width="wrap_content"
69                 android:layout_height="wrap_content"
70                 android:text="第二个"
71                 />
72               <Button
73                 android:id="@+id/bn24"
74                 android:layout_width="wrap_content"
75                 android:layout_height="wrap_content"
76                 android:text="第三个"
77                 />
78         </TableRow>
79
80     </TableLayout>
81
82 </LinearLayout>

  

2.2.3帧布局FrameLayout

  帧布局是吧一个一个的组件叠加起来

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     <!-- 定义6个TextView 先定义的在最下层会被后定义的遮挡 -->
 6     <TextView
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:layout_gravity="center"
10         android:width="280px"
11         android:height="280px"
12         android:background="#f00"/>
13     <TextView
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_gravity="center"
17         android:width="280px"
18         android:height="280px"
19         android:background="#0f0"/>
20     <TextView
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:layout_gravity="center"
24         android:width="240px"
25         android:height="240px"
26         android:background="#00f"/>
27     <TextView
28         android:layout_width="wrap_content"
29         android:layout_height="wrap_content"
30         android:layout_gravity="center"
31         android:width="200px"
32         android:height="200px"
33         android:background="#ff0"/>
34     <TextView
35         android:layout_width="wrap_content"
36         android:layout_height="wrap_content"
37         android:layout_gravity="center"
38         android:width="160px"
39         android:height="160px"
40         android:background="#f0f"/>
41     <TextView
42         android:layout_width="wrap_content"
43         android:layout_height="wrap_content"
44         android:layout_gravity="center"
45         android:width="120px"
46         android:height="120px"
47         android:background="#0ff"/>
48
49 </FrameLayout>

2.2.4相对布局RelativeLayout

  相对布局总是相对兄弟组件/父容器来决定的,如果A组件的位置油B的位置来决定,那么就必须先定义好B组件才能定义A组件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     <!-- 第一个居父容器中间 -->
 6     <TextView
 7         android:id="@+id/view1"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:layout_centerInParent="true"
11         android:text="第一个"
12         />
13     <!-- 第二个居第一个右上方 -->
14     <TextView
15         android:id="@+id/view2"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_above="@id/view1"
19         android:layout_toRightOf="@id/view1"
20         android:text="第二个"
21         />
22     <!-- 第三个居第一个左上方 -->
23     <TextView
24         android:id="@+id/view3"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         android:layout_above="@id/view1"
28         android:layout_toLeftOf="@id/view1"
29         android:text="第三个"
30         />
31     <!-- 第四个居第一个左下方 -->
32     <TextView
33         android:id="@+id/view4"
34         android:layout_width="wrap_content"
35         android:layout_height="wrap_content"
36         android:layout_below="@id/view1"
37         android:layout_toLeftOf="@id/view1"
38         android:text="第四个"
39         />
40     <!-- 第四个居第一个右下方 -->
41     <TextView
42         android:id="@+id/view5"
43         android:layout_width="wrap_content"
44         android:layout_height="wrap_content"
45         android:layout_below="@id/view1"
46         android:layout_toRightOf="@id/view1"
47         android:text="第五个"
48         />
49
50 </RelativeLayout>

2.2.5android4中的网格布局GridLayout

  

2.2.6绝对布局AbsoluteLayout

  

  

时间: 2024-10-13 12:08:57

2.2UI组件(一)布局管理器的相关文章

java常用组件以及布局管理器

Swing组件按功能来分,可以分为如下几类: ?  顶层容器:JFrame.JApplet.JDialog和JWindow ?  中间容器:JPanel.JScrollPane.JSplitPane.JToolBar ?  特殊容器:在用户界面上有特殊作用的中间容器,如:JInternalFrame.JRootPane.JLayeredPane和JDestopPane ?  基本组件:JButton.JComboBox.JList.JMenu.JSlider ?  不可编辑信息的显示组件:向用户

UI组件:布局管理器

一.线性布局(LinearLayout) 线性布局可以让布局中的组件一个接着一个的连在一起水平对齐(orientation="vertical")或者垂直对齐(orientation="horizontal"),写游戏界面时会限制动作,所以不推荐游戏界面中使用 特点:线性布局不会主动换行,当几个组件水平分布,但是这一行放不下时,多余的不会显示 二.绝对布局(AbsoluteLayout) 绝对布局没有布局控制,组件的大小和位置全部由开发人员用x,y坐标来一一定义,由

Android入门系列:UI组件:布局管理器:GridLayout

写一个计算器的示例,布局文件如下: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent&q

Java布局管理器组件

Java布局管理器组件 所谓布局管理器,就是为容器内的组件提供若干布局策略,每个容器都拥有某种默认布局管理器,用于负责其内部组件的排列.目前开发中,常用的布局管理器有BorderLayout.FlowLayout.GridLayout.GridBagLayout.CardLayout.BoxLayout.SpringLayout.GroupLayout等: 布局管理器种类 BorderLayout FlowLayout GridLayout GridBagLayout CardLayout Bo

QT开发(二十一)——QT布局管理器

QT开发(二十一)--QT布局管理器 一.布局管理器简介 QT中使用绝对定位的布局方式无法自适应窗口的变化. QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小. QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器. 布局管理器不是界面组件,而是界面组件的定位策略. 任意容器类型的组件都可以指定布局管理器. 同一个布局管理器管理中的组件拥有相同的父组件,在设置布局

Qt布局管理器(详解)

1.存在的问题 (1)目前的GUI开发方式:绝对定位 --直接在像素级指定各个组件的位置和大小 void QWidget::move(int x, int y) void QWidget::resize(int w, int h) (2)问题 --组件位置和大小无法自适应父窗口的变化 2.布局管理器 (1)解决方案:布局管理器 --提供相关的类对界面组件进行布局管理 @1:能够自动排列窗口中的界面组件 @2:窗口变化后自动更新界面组件的大小 (2)QLayout是Qt中布局管理器的抽象基类 (3

Swing布局管理器

package cn.Douzi.Graphics; import java.awt.*; import javax.swing.*; /** * BorderLayout 演示 * 1. 继承JFrame * 2. 定义你需要的各个组件 * 3. 创建组件(构造函数) * @author Douzi * */ public class Demo_layout extends JFrame { //定义组件 JButton jb1, jb2, jb3, jb4, jb5; public stat

【Java Swing探索之路系列】之三:Java Swing布局管理器组件

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 一 BorderLayout BorderLayout是一种简单的布局策略,可以将其看作一个组件.它把容器分为东.南.西.北.中5个区域,每个组件将占据某个区域.而 这5个区域分别被命名为NORTH, WEST, EAST, CENTER, SOUTH,它们都被定义为静态 常量.静态常量可以直接引用,如

【java】浅析java组件中的布局管理器

这篇博文笔者介绍一下java组件中,常用的布局管理器.java组件中的布局方式有好几十种,所有的这些布局管理器都实现了java.awt.LayoutManager接口.接下来笔者介绍一下常用的5种布局管理器,FlowLayout.BorderLayout.GridLayout.GridBagLayout.CardLayout.BoxLayout.如果不希望使用布局管理器,可以调用组件的 setLayout(null); ,但是不建议设置layout为null,因为这样就失去了跨平台特性,和jav