=====================================
这一次的内容比较多,下面是节选
====================================
使用Containers容器来进行布局
简单而言,我们使用各种layout布局类,来保存系统提供的小部件(Widget)。在前面我们已经介绍了,android中使用基于xml文件的布局,所以我们要了解,在android中,有哪些布局,以及如何使用xml来显示各种界面。
Android,虽然有LinearLayout(线性布局),也提供了其他的一些支持。我们接下来会先介绍Linearlayout。然后会介绍其他的:RelativeLayout(相对布局)和Tablelayout(表格布局),以及使用ScrollView(可滚动视图)
了解LinearLayout
可以看到,线性布局是继承自ViewGroup的
我们可以先看下ViewGroup
因为我们的UI界面,通常不会只有一个view视图的,所以android提供了这个ViewGroup的抽象类,类似于之前看到的Radiogroup. 在ViewGroup中定义了可以添加View的方法
你可以随意的向它的子类中添加各种视图,用于程序代码中动态生成界面。 特别注意的是下面这个方法:
我们可以通过ViewGroup.LayoutParams这类,把一个View作为布局中的一个元素,动态添加到界面中去。 我们在后面还会遇到这些 |
刚才说了,LinearLayout是线性布局,也成为盒子(Box)模型:其中的小部件或者子容器(布局是可以嵌套的哦),都是按照线性(行,或者列)的方式一个挨着一个的排列的。类似于javaswing中的FlowLatout。
概念和属性
要是用LinearLayout,你可能会遇到下面的几个需要设置的属性,以控制容器的内容:
分别是 the orientation(水平方向),the fill model (填充方式),the weight(重量),the gravity(排列方向),以及the padding(间距)、下面分别介绍
the orientation(水平方向)
the orientation(水平方向)表示布局中的小部件,是按照行还是按照列排列。
添加android:orientation属性,可以设置horizontal水平(按行)排列,或者vertical垂直(按列)排列
Ps: orientation的值可以在运行时,通过调用LinearLayout类的setOrientation()方法来设置。以调整水平还是垂直排列。
Fill Model(填充模式)
一般来说,小部件都需要设置宽度和高度。那么宽度和高度的值,就称为填充.
我们可以通过
Android:layout_width和android:layout_height属性来设置。
我们一般可以通过如下三种方式来设置值:
l 可以提供具体的尺寸(dimension),比如125px,表示125个像素
l 可以提供wrap_content ,表示这个小部件会填充它的自然(初始)空间大小,一般除非它很大,都会按照系统自带的属性来填充属于它本来自己的空间的。
l 可以使用fill_parent ,表示小部件会填充满从它的位置开始,到所在的容器剩余的位置,其他的在它之后的小部件就会被掩盖掉(忽视掉,屏幕中看不到后面的小部件了)
后面的两种填充模式是常用的。因为他们是独立于屏幕尺寸的,会自适应。根据不同的设备,会自己调整大小一遍适应设备。
Weight(比重)
但是,如果我们需要两个小部件来分配容器中剩余的空间,我们该怎么办呢?比如,有两个多行输入的文本区域,按照列的方式排列。我们希望两个把剩余的填充满(什么意思呢?如果按照之前的wrap_方式,只能填充小部件自己的尺寸,如果按照fill_方式,只会显示其中一个,除非按照第一种方式,但是这种方式不能保证手机设备的自适应),所以我们这个时候就会用到weight这个属性了
为了达到这种目的,我们可以添加 android:weight属性(不论是按照列还是行来排列,他们都是采用 fill的填充方式),这个weight属性表示这些小部件所占据的剩余空间的比例。
如果,你设置了这两个小部件的 weight的值都一样,那么他们俩就会占据剩下空间的1/2(此时, android:weight都可以设置为1,表示1:1),如果一个设置1,另一个设置 2,那么前面一个就占有1/3,后一个占有2/3
Gravity(对齐方向)
默认情况下,所有的小部件都是左对齐 (left)和置顶(Top)的。如果你希望按照自己的方式来对齐的话,可以设置一些特殊的值。
我们可以通过属性
Android:layout_gravity 或者调用方法 setGravity()来设置。
一般对应的值有
Left,center_horizontal,center_vertical right,等。。
Padding(间距)
默认情况下,小部件之间都是紧紧挨着的。如果你希望部件之间有些间距,那么可以通过设置padding来达到目的。
使用 android:padding 或者 setpadding()
我们直接通过下面的图来看就很容易明白这个属性的意思(其实,学习了html的同学,会很容易理解的)
Android:padding 设置的是四个方向都一样的值
如果希望设置某一边的,可以选择
Android:paddingLeft ,android:paddingRight,android:paddingTop,android:paddingBottom
他们对应的值均是像素值,比如 5px
下面我们看一个例子吧:
首先是布局文件
布局文件显示
界面中有两组单选按钮,只要选中一个按钮,就会让界面布局发生变化
分别是:水平,垂直,左,中,右的效果
那么我们看下Activity代码
代码很简单,在onCreate()方法中,我们实例化了布局中的两个RadioGroup,并分别给他们注册了监听器。用于监听单选按钮的状态,即setOnCheckedChangeListener(this)..
因为我们定义的Activity这个类的时候,让它实现了OnCheckedChangeListener这个接口。那么这个Activity本身就是一个监听器啦~~~^_^
在回调方法onCheckedChange()中,我们看到了每个按钮组的变化。