通过四天的学习,逐步掌握了布局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.**)调用。