1、AndroidLayoutAndroidLayout有五大布局对象,分别是FrameLayout(帧布局)LinearLayout (线性布局)AbsoluteLayout(绝对布局)RelativeLayout(相对布局)TableLayout(表格布局)FrameLayout该布局container可以用来占有屏幕的某块区域来显示单一的对象,可以包含有多个widgets或者是container,但是所有被包含的widgets或者是container必须被固定到屏幕的左上角,并且一层覆盖一层,不能通过为一个widgets或者是container指定一个位置。Container所包含的widg
2、ets或者是container的队列是采用的堆栈的结构,最后加进来的widgets或者是container显示在最上面。所以后一个widgets或者是container将会直接覆盖在前一个widgets或者是container之上,把它们部份或全部挡住(除非后一个widgets或者是container是透明的,必须得到FrameLayout Container的允许)。其中Main.xml代码如下: Strings.xml代码如下: Hello World, LayoutTestActivity! LayoutTest Hello World, I can not be LOST!如下图,其中
3、TextView Hello2是最后FrameLayout最后加入的,所以该TextView应该是覆盖整个屏幕的,TextView hello1被其覆盖:LinearLayoutLinearLayout是一个盒子模型(Box Model),以垂直或水平的方向,按照相对位置来排列所有的widgets或者其他的containers。所有被包含的widgets或者是containers都被堆放在container之后,因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLayout
4、保持其所包含的widget或者是container之间的间隔以及互相对齐(相对一个控件的右对齐、中间对齐或者左对齐)。LinearLayout还支持为其包含的widget或者是container指定填充权值。好处就是允许其包含的widget或者是container可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串widgets或者是containers挤成一堆的情况,而是允许他们放大填充空白。剩余的空间会按这些widgets或者是containers指定的权值比例分配屏幕。默认的 weight 值为0,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将Co
5、ntainer剩余可用空间分割,分割大小具体取决于每一个widget或者是container的layout_weight及该权值在所有widgets或者是containers中的比例。例如,如果有三个文本框,其中两个指定的权值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大,按实际大小来显示。如果前两个文本框的取值一个为2,一个为1,显示第三个文本框后剩余的空间的2/3给权值为2的,1/3大小给权值为1的。也就是权值越大,重要度越大。如果LinearLayout包含子LinearLayout,子LinearLayout之间的权值越大的,重要度则越小。如果有Lin
6、earLayout A包含LinearLayout C,D,C的权值为2,D的权值为1,则屏幕的2/3空间分给权值为1的D,1/3分给权值为2的C。在LinearLayout嵌套的情况下,子LinearLayout必须要设置权值,否则默认的情况是未设置权值的子LinearLayout占据整个屏幕。我们看一下效果图:其中main.xml代码如下: 下面一个例子用来解释一下LinearLayout的一些属性的设置,在LinearLayout中包含有两个RadioGroup,上面的RadioGroup设置了一行的RadioButton,如android:orientation=horizontal,
7、下面的一个设置了一列的RadioButton。每个RadioGroup都在其周围设置了padding用来和其他的RadioGroup区分开。这两个RadioGroup的layout_height和layout_width都设置为Wrap_content,这些RadioGroup只会按照实际显示大小来显示。 Main.xml的内容如下: 具体示图如下:下面将通过在Activity里面动态修改LinearLayout(二)中相应的属性来改变屏幕布局,代码如下:package com.hemi.LayoutTest; import android.app.Activity;import androi
8、d.os.Bundle;import android.view.Gravity;import android.text.TextWatcher;import android.widget.LinearLayout;import android.widget.RadioGroup;import android.widget.EditText; public class LayoutTestActivityextends Activityimplements RadioGroup.OnCheckedChangeListener RadioGrouporitentation; RadioGroupg
9、ravity; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); oritentation = (RadioGroup)findViewById(R.id.orientation); oritentation.setOnCheckedChangeListener(this); gravity =(Rad
10、ioGroup)findViewById(R.id.gravity); gravity.setOnCheckedChangeListener(this); public void onCheckedChanged(RadioGroup group,int checkedId) if(group=oritentation) if(checkedId = R.id.horizotal) oritentation.setOrientation(LinearLayout.HORIZONTAL); gravity.setOrientation(LinearLayout.HORIZONTAL); else
11、 oritentation.setOrientation(LinearLayout.VERTICAL); gravity.setOrientation(LinearLayout.VERTICAL); else if(checkedId = R.id.left) oritentation.setGravity(Gravity.LEFT); gravity.setGravity(Gravity.LEFT); else if (checkedId = R.id.right) oritentation.setGravity(Gravity.RIGHT); gravity.setGravity(Grav
12、ity.RIGHT); else oritentation.setGravity(Gravity.CENTER_HORIZONTAL); gravity.setGravity(Gravity.CENTER_HORIZONTAL); 通过点击Oritentation和Gravity的RadioGroup来控制布局,默认的布局由main.xml来配置。点击horizontal,vertical或者center和right可改变布局,示图如下:RalativeLayout我们从RalativeLayout可以知道,该布局的父子Container中所有的Widgets之间的位置都是相对的。你可以把Wi
13、dget A放在Widget的左下方,或者放在Widget的底边并和Container的底边之间。它允许为Container或者widget指定其相对于其他widgets或者父Container的位置。Container或者widgets是按顺序排列的,如果第一个Container或者widget在屏幕的中央,那么相对于其的其他Container和widgets将以屏幕的中央来排列。如果使用XML的Layout文件来定义,被引用的Container或者widgets必须被定义。在XML的layout文件中,我们就能够引用同一文件的Widgets,并且可以标识其他Widgets的相对位置。标识一
14、个Widgets在其Container中的位置,我们有下面的属性参数可以用,这些参数的值可以使true或者false:1).android:layout_alignParentTop: 表示widget的顶部和Container的顶部重合。2).android:layout_alignParentBottom: 表示widget的底部和Container的底部重合。3).android:layout_alignParentLeft:表示widget的左边和Container的左边重合。4).android:layout_alignParentRight:表示widget的右边和Containe
15、r的右边重合。5).android:layout_centerHorizontal:表示widget处于Container水平方向上的中间。6).android:layout_centerVertical:表示widget处于Container垂直方向上的中间。7).android:layout_centerInParent:表示widget处于Container平面上的正中间。标识同一个Container中的不同的widgets之间的相对位置时,可有用如下的属性参数,参数值是其他widgets的应用。相对位置上的widgets的引用的设定如下:首先必须给所有的被引用的widgets赋予标示符
16、,通过android:id的属性,格式如+id/widget1,然后在其他widget引用的时候使用同样的标示符,格式如id/widget1,例:如果widget A标识为+id/widget A,则widget B在其属性里面通过id/widget A引用widget A。1).android:layout_above: 表示该widget必须位于参数值标识的widget的上方。2).android:layout_below: 表示该widget必须位于参数值标识的widget的下方。3).android:layout_toLeftOf: 表示该widget必须位于参数值标识的widget的
17、左方。4).android:layout_toLeftOf: 表示该widget必须位于参数值标识的widget的右方。5).android:layout_alignTop: 表示该widget的顶部必须参数值标识的widget的顶部重合。6).android:layout_alignBottom: 表示该widget的底部必须参数值标识的widget的底部重合。7).android:layout_alignLeft: 表示该widget的左边必须参数值标识的widget的左边重合。8).android:layout_alignRight: 表示该widget的右边必须参数值标识的widget
18、的右边重合。9).android:layout_alignBaseLine: 表示该widget的BaseLine必须参数值标识的widget的BaseLine重合。这个主要用于Label或者其他包含文本的widgets。在我们引用widget时不能引用该文件中尚未定义的widget。具体的示例如下: 示图如下:TableLayoutAndroid 的TableLayout的布局就像Html的表格一样,可以根据我们的说明来安排widgets的位置。我们可以自己控制屏幕的行数和列数,而每列可以根据包含的内容进行伸缩。通常情况下,TableLayout有多个TableRow组成,每个TableRow就是一行,定义几个TableRow就是定义几行。TableLayout不会显示行或者列或者cell的边线。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1