首先要说的是,在Android中其界面组件“丰富多彩”,这相对来说如果不能很好地理顺它们的内在联系的话,将不能完美地向用户展现出美观且有着良好交互性的界面。所以针对这种情况,Android以ViewGroup为基类派生出了布局管理器。通过使用布局管理器,将布局所用到的UI组件放置到其中,这样使得Android应用的图形用户界面具有了良好的平台无关性,UI组件的分布和大小只在布局管理器中显示。而程序员要做的是为容器选择合适的布局管理器。
在Android中有五种布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、绝对布局(AbsoluteLayout)。
在这里将介绍线性布局(LinearLayout)。
线性布局:
在XML中用LinearLayout来代表,它对于Swing编程来说有点像Box,它们都是将容器里的组件一个挨着一个地排列起来的,使用LinearLayout时一定要指定其布局方向(水平/垂直)。(当然宽高的指定是除了表格布局之外每个布局都必须要设置的)在指定好布局方向后,组件会自动按其方向一个个排好,如果该方向的空间已占满,其他组件将不会被显示出来。
相对其他布局来说,LinearLayout有个显著的优点就是它能指定“权重”,所谓权重就是按比例分配剩余空间,也就是说先将各组件自身所占据的像素值减去,之后剩下的像素值按给定的权重值进行比例分配。这也是为什么当要给组件进行等分的时候除了将权重值设置为一致时,还建议将各组件自身的layout_width(或layout_height)设为“0dp”
接下来详细地介绍一下LinearLayout布局的一些属性。
首先介绍下布局中常见的一个问题:android:layout_gravity 和 android:gravity 的区别
android:layout_gravity 该属性设置该子元素在父容器中的对齐方式。
android:gravity 该属性用于控制它所包含的子元素的对齐方式。
举个例子来说:这是一个Button控件
android:layout_gravity 表示button在界面上的位置
android:gravity 表示button上的字在button上的位置android:layout_weight 子元素对未占用空间水平或垂直分配权重值
android:orientation 用来指定布局方向,以列或行来显示内部子元素
值得一提的是,当指定布局方向为竖直即android:orientation="vertical" 时,只能左右对齐和水平居中,顶部底部对齐、竖直居中无效; 当指定布局方向为水平即android:orientation="horizontal" 时,只能顶部底部对齐、竖直居中;
Demo:
效果图:
布局代码如下: