在开发Android应用中,有时候会在多个界面中出现同样的布局

如在顶部或底部显示菜单栏,时间显示等。为了避免麻烦,不用

在每个界面都布局,这个时候我们用到了BaseActivity(不是系统

的自己定义的)在BaseActivity布局里,我们可以把公用的布局先

写出来,如界面顶部有返回按钮,有当前界面Title。在界面底部有

时间显示栏,且时间和系统时间同步,不断刷新。在BaseActivity

的布局里,我们留出LinearLayout这样一个线性布局,并且设置属性

id,这样其他界面的layout放置到这个LinearLayout里就可以了。

我们看一下具体的使用步骤:

1、定义一个公用类的Activity我这里叫MyBaseActivity继承Activity

并且该MyBaseActivity为抽象类abstract,因为里面有抽象方法

2、定义一个基本类如FirstActivity继承MyBaseActivity并实现

MyBaseActivity里面的抽象方法

3、在MyBaseActivity类中有两个抽象方法onBaseCreare(Bundle bundle)

和initView()其中 onBaseCreare()方法顾名思义是实现界面显示的也就

是类似于onCreate()中的setContentView(layout),initView()方法用于

初始化一些数据,如Title的设置,时间显示等。

4、在MyBaseActivity类中有getbtn_left()方法,可获取公共控件的控制。


贴出详细代码:

先看xml布局:

//activity_my_base.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="fill_parent"android:orientation="vertical"android:weightSum="10"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:weightSum="3"><Buttonandroid:id="@+id/button1_base"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="左按钮"/><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="标题"/><Buttonandroid:id="@+id/button3_base"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="右按钮"/></LinearLayout><LinearLayoutandroid:id="@+id/layout_id"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="8.5"android:orientation="horizontal"></LinearLayout><LinearLayoutandroid:id="@+id/layout_bottom"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="0.5"><TextViewandroid:id="@+id/time"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:gravity="center"android:text="标题"/></LinearLayout></LinearLayout>


//activity_first.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:weightSum="1"tools:context=".FirstActivity"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_gravity="center"android:layout_weight="1"android:orientation="vertical"><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="intoSecondActivity"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="20dp"android:text="Button2"/></LinearLayout></LinearLayout>


//activity_second.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:weightSum="3"><Buttonandroid:id="@+id/button1_second"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="返回"/><Buttonandroid:id="@+id/button12_second"android:layout_width="fill_parent"android:layout_height="50dp"android:layout_weight="1"android:text="Button"/><Buttonandroid:id="@+id/button3_second"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="Button"/></LinearLayout></LinearLayout>


//接下来看一下类中的源码

首先是公共类 MyBaseActivity

packagecom.example.testbaseactivity;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.TimerTask;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid.widget.Toast;importandroid.widget.LinearLayout.LayoutParams;importandroid.widget.TextView;publicabstractclassMyBaseActivityextendsActivityimplementsOnClickListener{//内容区域的布局privateViewcontentView;privateLinearLayoutlayoutBody;privateButtonbtn1;privateButtonbtn2;privateTextViewtv;privateTextViewvTime;privateStringtimeString;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_my_base);btn1=(Button)findViewById(R.id.button1_base);btn2=(Button)findViewById(R.id.button3_base);btn1.setOnClickListener(this);btn2.setOnClickListener(this);tv=(TextView)findViewById(R.id.title);layoutBody=(LinearLayout)findViewById(R.id.layout_id);vTime=(TextView)findViewById(R.id.time);onBaseCreare(savedInstanceState);initView();}/***初始化界面*@parambundle*/publicabstractvoidonBaseCreare(Bundlebundle);/***初始化数据*/publicabstractvoidinitView();/***底部栏刷新时间*刷新间隔1s*/publicvoidsetTime(){intdelay=0;intperiod=1000;//循环间隔1000msjava.util.Timertimer=newjava.util.Timer();timer.scheduleAtFixedRate(newTimerTask(){publicvoidrun(){timeString=getTime();myhandler.sendEmptyMessage(0x0001);}},delay,period);}@SuppressLint("HandlerLeak")privateHandlermyhandler=newHandler(){publicvoiddispatchMessage(android.os.Messagemsg){switch(msg.what){case0x0001:vTime.setText(timeString);break;}}};@SuppressLint("SimpleDateFormat")publicstaticStringgetTime(){Datenowdate=newDate();//当前时间SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");returndateFormat.format(nowdate);}/***设置标题**@paramtitle*/publicvoidsetTitle(Stringtitle){if(null!=tv){tv.setText(title);}}/***隐藏上方的标题栏*/publicvoidhideTitleView(){if(null!=btn1){btn1.setVisibility(View.INVISIBLE);}}publicvoidsetContentViewId(intlayoutId){contentView=getLayoutInflater().inflate(layoutId,null);if(layoutBody.getChildCount()>0){layoutBody.removeAllViews();}if(contentView!=null){LayoutParamsparams=newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);layoutBody.addView(contentView,params);}}/***得到左边的按钮**@return*/publicButtongetbtn_left(){returnbtn1;}/***得到右边的按钮**@return*/publicButtongetbtn_right(){returnbtn2;}@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubif(arg0.equals(btn1)){Toast.makeText(MyBaseActivity.this,"MyBaseActivity---btn1",Toast.LENGTH_SHORT).show();}if(arg0.equals(btn2)){Toast.makeText(MyBaseActivity.this,"MyBaseActivity---btn2",Toast.LENGTH_SHORT).show();}}}

//第一个界面 FirstActivity

packagecom.example.testbaseactivity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;publicclassFirstActivityextendsMyBaseActivity{privateButtonbtn1;privateButtonbtn2;privateButtonbtn_left;privateButtonbtn_right;@OverridepublicvoidonBaseCreare(Bundlebundle){setContentViewId(R.layout.activity_first);btn_left=getbtn_left();btn_right=getbtn_right();findViewById();}@OverridepublicvoidinitView(){setTitle("FirstActivity");setTime();}publicvoidfindViewById(){btn1=(Button)findViewById(R.id.button1);btn2=(Button)findViewById(R.id.button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@OverridepublicvoidonClick(Viewarg0){if(arg0.equals(btn1)){Intentintent=newIntent(this,SecondActivity.class);startActivity(intent);}if(arg0.equals(btn2)){Toast.makeText(FirstActivity.this,"FirstActivity---btn2",Toast.LENGTH_SHORT).show();}if(arg0.equals(btn_left)){Toast.makeText(FirstActivity.this,"FirstActivity---btn_left",Toast.LENGTH_SHORT).show();}if(arg0.equals(btn_right)){Toast.makeText(FirstActivity.this,"FirstActivity---btn_right",Toast.LENGTH_SHORT).show();}}}


//第二个界面

packagecom.example.testbaseactivity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassSecondActivityextendsMyBaseActivityimplementsOnClickListener{privateButtonbtn;@OverridepublicvoidonBaseCreare(Bundlebundle){setContentViewId(R.layout.activity_second);btn=(Button)findViewById(R.id.button1_second);btn.setOnClickListener(this);}@OverridepublicvoidinitView(){setTime();setTitle("SecondActivity");}@OverridepublicvoidonClick(Viewarg0){//TODOAuto-generatedmethodstubif(arg0.equals(btn)){finish();}}}


//manifest.xml

<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testbaseactivity"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="16"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name="com.example.testbaseactivity.FirstActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><activityandroid:name="com.example.testbaseactivity.MyBaseActivity"></activity><activityandroid:name="com.example.testbaseactivity.SecondActivity"></activity></application></manifest>给出效果图