. 什么是布局
就是把界面中的控件按照某种规律摆放到指定的位置
2. 布局的二种实现
代码
xml配置文件:res/layout目录下
注:也可以同时使用xml和代码
3. 布局的基本属性
取值范围
{ //效果是一样的获取到父容器的宽度或者高度
fill_parent//过时
match_parent//不过时
wrap_content//自身元素需要的宽度或者高度
}
固定值
{
dp 控件大小 理解为长度单位和px差不多
sp 文字大小
}
padding 内边距
margin 外边距
android:gravity:控件内部的元素(理解为在父元素上控制子元素位置)
android:layout_gravity:控件所在父元素的位置(理解为在自身元素控制自己的位置)
4. 常见布局
线性布局(重点) LinearLayout
表格布局(几乎不用)
帧布局
绝对布局
相对布局 RelativeLayout
网格布局
- 线性布局(重点)
layout_gravity="vertical|horizontal"//vertical垂直排列 horizontal水平排列
fill_horizontal//填充水平
LinearLayout布局中Layout_weight属性的作用
8.1 首先声明只有在Linearlayout中,layout_weight属性才有效。
8.2 它是用来指定(剩余空闲空间)的分割比例,而非按比例分配整个空间。
8.3 另外android:layout_weight会引起争议,是因为在设置该属性的同时,
设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果。
8.4 如果想用layout_weight平均分配空间,正确方式是将layout_width(或layout_height)设置为0dp,
再通过layout_weight按比例分配空间
注:关键点在于搞清楚什么是剩余空闲空间
FrameLayout帧布局(就好象一张张卡片堆叠上去,后面会盖出前面的)
通过设置边距和位置决定出现位置
注:帧布局有点类似于awt的CardLayout都是把组件一个一个叠加到一起,
但CardLayout能将下面的组件移上来,但FrameLayout没有提供此功能
ImageView
src
scaleType="fitXY" XY方向拉伸
android:scaleType="fitXY"
android:src="@drawable/img18"
- 相对布局窗口内子组件的位置总是相对兄弟组件、父容器来决定的,因此叫相对布局
- 如果A组件位置是由B组件的位置决定的,Android要求先定B组件,再定义A组件
- 注1:注意XML中组件的顺序,不然会报错
注2:android新版本中组件的定义顺序没有关系
RelativeLayout支持的二个xml属性
1.3.1 android:gravity :设置该布局容器内各子组件的对齐方式
1.3.2 android:ignoreGravity:设置哪个组件不受gravity属性的影响
1.4 控制子组件布局的内部类RalativeLayout.LayoutParams
此内部类的属性分二类
1.4.1 boolean
相对父元素
alignParent...
center...(只有在父元素中才存在水平或垂直居中等)
相对布局(重点)RelativeLayout
layout_alignParentBottom//出现在父元素的底部设置true或者false
layout_centerInParentm//出现在父元素的正中间设置true或者false
layout_alignParentRight//出现在父元素的右边设置true或者false
layout_alignParentLeft//出现在父元素的左边设置true或者false
id="@+id/需要设置的id"//给控件设置id
@+id和@id的区别
@+id/x1(添加新ID)
@id/x1(引用此ID)
相对于指定元素(根据ID指定)
layout_alignRight="@id/id3"//出现在指定元素的某位置
layout_toRightOf,layout_toLeftOf(是一种靠拢动作)
例二:网格布局GridLayout
--4的跨行出现的问题,因为4的向下没有东西拦住了
- 常用属性rowCount(行数)、columnCount(列数)
GridLayout中子控件相关属性:layout_gravity="fill_horizontal(水平填充)|fill_vertical(垂直填充)"
2.2 Space标签的作用:挡住控件,让其不超出网格的范围
<Space android:layout_width="wrap_content" android:layout_height="wrap_content"/>