大家好,又见面了,我是你们的朋友全栈君。
Android基本布局分别是:线性布局LinearLayout、相对布局RelativeLayout、帧布局FrameLayout、表格布局TableLayout、网格布局GridLayout。
其中,表格布局是线性布局的子类。网格布局是android 4.0后新增的布局。
普通视图还是布局都继承自 View ,其中 ViewGroup 就是所有布局的父类, ViewGroup 继承自 View 同时可以对 View 进行管理 ( 编排,控制 View 显示位置和大小 )主要掌握以下三种布局
LinearLayout(常用的布局) 线性布局,可以水平编排或者垂直编排孩子的显示 android:orientation=”vertical” 设置方向 vertical 垂直 ( 沿着 y 坐标 ) horizontal 水平方向(沿着 x 坐标) 线性布局中可以使用 android:layout_weight 属性设置权重,可以将 LinearLayout 中剩下的部分进行比例划分 LinearLayout 中如果需要使用占位视图可以使用 Space <Space android:layout_width=”1dp” android:layout_height=”0dp” android:layout_weight=”1″ />
LinearLayout 中使用 android:gravity 可以调整孩子的对齐方式,但是要注意方向,垂直的 ( 如果高不定 ) ,可以调整孩子在 leftcenterhorizontalright 如果是水平 ( 宽如果不定 ) 可以调整孩子在 topcenterverticalbottom
RelativeLayout 相对布局 第一种:子视图相对于父容器,取值为 true/false android:layout_alignParentLeft=”true” 靠父容器左侧 android:layout_alignParentRight=”true” 靠父容器右侧 android:layout_alignParentTop=”true” 靠父容器顶部 android:layout_alignParentBottom=”true” 靠父容器底部 android:layout_centerVertical=”true” 垂直居中 android:layout_centerInParent=”true” 居中 android:layout_centerHorizontal=”true” 水平居中 第二种:子视图之间相互参考,值对方视图的 id –> @id/xxx id 的声明: @ id/id 名称 如: @ id/tv_a id 的引用: @id/id 名称 如: @id/tv_a android:layout_toLeftOf 在谁的左侧 android:layout_toRightOf 在谁的右侧 android:layout_above 在谁的上面 android:layout_below 在谁的下面 android:layout_alignTop 顶部对齐 android:layout_alignLeft 左侧对齐 android:layout_alignRight 右侧对齐
android:layout_alignBottom 底部对齐
FrameLayout 帧布局 ( 框架布局 ) ,布局特性是所有孩子默认叠在该容器左上角 <FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” > <TextView android:layout_width=”200dp” android:layout_height=”50dp” android:background=”#55ff0000″ /> <TextView android:layout_width=”150dp” android:layout_height=”100dp” android:background=”#5500ff00″ /> <TextView android:layout_width=”100dp” android:layout_height=”150dp” android:background=”#550000ff” /> </FrameLayout> 其中孩子中可以使用 android:layout_gravity 来调整自己在父容器中的位置 ( 主动权在孩子身上 ) ,跟 android:gravity 不一样的是 android:gravity 主动权在父元素身上 <FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” > <TextView android:layout_width=”200dp” android:layout_height=”50dp” android:background=”#55ff0000″ android:text=”ABC” android:layout_gravity=”center” /> 设置该视图显示在 FrameLayout 正中间 … <TextView android:layout_width=”150dp” android:layout_height=”100dp” android:background=”#5500ff00″ android:layout_gravity=”right|bottom” /> 显示在右下角
</FrameLayout>
TableLayout
表格布局继承自LinearLayout,通过TableRow设置行,列数由TableRow中的子控件决定,
直接在TableLayout中添加子控件会占据整个一行。
TableLayout常用属性:
android:shrinkColumns:设置可收缩的列,内容过多就收缩显示到第二行
android:stretchColumns:设置可伸展的列,将空白区域填充满整个列
android:collapseColumns:设置要隐藏的列
列的索引从0开始,shrinkColumns和stretchColumns可以同时设置。
子控件常用属性:
android:layout_column:第几列
android:layout_span:占据列数
GridLayout(网格布局)
作为android 4.0 后新增的一个布局,与前面介绍过的TableLayout(表格布局)其实有点大同小异;
不过新增了一些东西
1、跟LinearLayout(线性布局)一样,他可以设置容器中组件的对齐方式
2、容器中的组件可以跨多行也可以跨多列(相比TableLayout直接放组件,占一行相比较)。
常用属性:
排列对齐:
①设置组件的排列方式: android:orientation=”” vertical(竖直,默认)或者horizontal(水平)
②设置组件的对齐方式: android:layout_gravity=”” center,left,right,buttom
设置布局为几行几列:
①设置有多少行: android:rowCount=”4″ //设置网格布局有4行
②设置有多少列: android:columnCount=”4″ //设置网格布局有4列
设置某个组件位于几行几列
注:都是从0开始算的哦!
①组件在第几行: android:layout_row = “1” //设置组件位于第二行
②组件在第几列: android:layout_column = “2” //设置该组件位于第三列
设置某个组件横跨几行几列:
①横跨几行: android:layout_rowSpan = “2” //纵向横跨2行
②横跨几列: android:layout_columnSpan = “3” //横向横跨2列
最后说一点:
GridLayout是android 4.0 后才推出的,API Level 为 14
如果读者将布局设置为GridLayout时,会出现 莫名其妙的报错,
只需要将配置文件中的 MinSDK改成14或者以上版本 即可,保存
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136976.html原文链接:https://javaforall.cn