通过四天的学习,逐步掌握了布局layout的使用。下面记录的是 FrameLayout和RelativeLayout 的详细使用,包括:在src中建立了activity后配置与之对应的 res/layout 文件与res/values文件,以及AndroidManifest文件。
首先,先介绍四种布局:
FrameLayout,RelativeLayout,LinearLayout,TableLayout。
1> FrameLayout:一个FrameLayout对象好比在屏幕上提前预定好的空白区域,可以填充一些元素在里面。但是 注意!所有的元素都被放在FrameLayout区域的最左上区域。如果一个FrameLayout里面有多个元素,则 后面的元素的显示会重叠在前一个元素上。
2> RelativeLayout: 这是相对布局,优点是很灵活。里面的元素都是按照各自之间的相对位置来进行排列的。 注意! 相对布局的精确位置的计算只会执行一次,所以,如果一个可视化组件B依赖与A,那么必须要让A出现在B前面。
3> LinearLayout:是将它自己包含的子元素 按照一个方向进行排列。方向有两种:水平 vertical 或者 竖直 horizonal。
4> 这是表格布局。这种布局会把包含的元素 以列或者行的形式进行排列。


-------代码步骤解析---------------------------------------------------
首先在src中 创建一个ActivityMain.java文件,这是程序的入口,也就是你在虚拟机上点击该程序所显示的第一个界面。
代码如下:

import android.app.Activity; 

import android.content.Intent; 

import android.os.Bundle; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.Button; 


public class ActivityMain extends Activity { 

 /** 

 * 声明button 和 监听器; 

 */ 

 Button button0; 

 Button button1; 

 Button button2; 

 Button button3; 

 OnClickListener listener0; 

 OnClickListener listener1; 

 OnClickListener listener2; 

 OnClickListener listener3; 


 /** Called when the activity is first created. */ 

 @Override 

 public void onCreate(Bundle savedInstanceState) { 

 super.onCreate(savedInstanceState); 


 listener0 = new OnClickListener(){ 


 public void onClick(View v) { 

 Intent intent0 = new Intent(ActivityMain.this,ActivityTwo.class); 

 startActivity(intent0); 

 } 


 }; 


 listener1 = new OnClickListener(){ 

 public void onClick(View v){ 

 Intent intent1 = new Intent(ActivityMain.this,ActivityThree.class); 

 startActivity(intent1); 

 } 

 }; 


 //负责当前的Activity与main.xml相连; 

 setContentView(R.layout.main); 

 button0 = (Button)findViewById(R.id.button0); 

 button0.setOnClickListener(listener0); 


 button1 = (Button)findViewById(R.id.button1); 

 button1.setOnClickListener(listener1); 


 } 

}




程序中可能看不懂的地方:

A onCreate() 是一个重载的函数,在这个函数中,会实现应用程序创建的所执行的过程。(反正每个activity都要重写该方法) 

 B Bundle savedInstanceState:在Activity 的生命周期中,只要跳转了页面,就失去了焦点,则此Activity就被销毁了。那么当一个Activity被pause时,调用onSaveInstanceState()来保存当前的Activity()。用来保存信息的Bundle会同时调用OnRestoreInstanceState() 和 onCreat() 方法。 

 C setContentView(R.layout.main) :负责当前的Activity与 .xml 文件相关联。即显示 .xml中的布局。 

 D Intent intent0 = new Intent(ActivityMain.this,ActivityTwo.class): 表示从当前的Activity跳转到另一个Activity。 

 E startActivity(intent0):当点击按钮时,开始Activity的转换。 

 F button0 = (Button)findViewById(R.id.button0); 

 button0.setOnClickListener(listener0);


表示,找到按钮所对应的id值,点击按钮,变触动监听器。


ActivityMain 对应的 .xml 文件代码如下:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

 android:orientation="vertical" 

 android:layout_width="fill_parent" 

 android:layout_height="fill_parent" 

 > 

<TextView 

 android:layout_width="fill_parent" 

 android:layout_height="wrap_content" 

 android:text="@string/hello" 

 /> 

 <Button android:id="@+id/button0" 

 android:layout_width="fill_parent" 

 android:layout_height="wrap_content" 

 android:text="@string/button0" 

 /> 

 <Button android:id="@+id/button1" 

 android:layout_width="fill_parent" 

 android:layout_height="wrap_content" 

 android:text="@string/button1" 

 /> 

</LinearLayout> 

 代码解析:此布局为LinearLayout。android:orientation="vertical"子元素垂直排列。在Android学习(一)中已经解释了fill_parent与wrap_content的区别。 android:text="@string/**name" 在res/values的string.xml文件中定义 

<string name="**name">**name的显示出来的文字</string>。 

 @+id/ 会将此id加到R.java中,以便setContentView(R.layout.**)与findViewById(R.id.**)调用。