在开发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

    
        
        
        
        
        
        
    

//activity_first.xml

    
                
        
        
    

//activity_second.xml

    
        
                
                
    

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

首先是公共类 MyBaseActivity 

package com.example.testbaseactivity;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimerTask;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;import android.widget.LinearLayout.LayoutParams;import android.widget.TextView;public abstract class MyBaseActivity extends Activity implements OnClickListener{// 内容区域的布局private View contentView;private LinearLayout layoutBody;private Button btn1;private Button btn2;private TextView tv;private TextView vTime;private String timeString;@Overrideprotected void onCreate(Bundle savedInstanceState) {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();}/** * 初始化界面 * @param bundle */public abstract void onBaseCreare(Bundle bundle);/** * 初始化数据 */public abstract void initView();/** * 底部栏刷新时间 * 刷新间隔1s */public void setTime() {int delay = 0;int period = 1000;// 循环间隔 1000msjava.util.Timer timer = new java.util.Timer();timer.scheduleAtFixedRate(new TimerTask() {public void run() {timeString = getTime();myhandler.sendEmptyMessage(0x0001);}}, delay, period);}@SuppressLint("HandlerLeak")private Handler myhandler = new Handler() {public void dispatchMessage(android.os.Message msg) {switch (msg.what) {case 0x0001:vTime.setText(timeString);break;}}};@SuppressLint("SimpleDateFormat")public static String getTime() {Date nowdate = new Date(); // 当前时间SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return dateFormat.format(nowdate);}/** * 设置标题 *  * @param title */public void setTitle(String title) {if (null != tv) {tv.setText(title);}}/** * 隐藏上方的标题栏 */public void hideTitleView() {if (null != btn1) {btn1.setVisibility(View.INVISIBLE);}}public void setContentViewId(int layoutId) {contentView = getLayoutInflater().inflate(layoutId, null);if (layoutBody.getChildCount() > 0) {layoutBody.removeAllViews();}if (contentView != null) {LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);layoutBody.addView(contentView, params);}}/** * 得到左边的按钮 *  * @return */public Button getbtn_left() {return btn1;}/** * 得到右边的按钮 *  * @return */public Button getbtn_right() {return btn2;}@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(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 

package com.example.testbaseactivity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class FirstActivity extends MyBaseActivity {private Button btn1;private Button btn2;private Button btn_left;private Button btn_right;@Overridepublic void onBaseCreare(Bundle bundle) {setContentViewId(R.layout.activity_first);btn_left = getbtn_left();btn_right = getbtn_right();findViewById();}@Overridepublic void initView() {setTitle("FirstActivity");setTime();}public void findViewById(){btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View arg0) {if(arg0.equals(btn1)){Intent intent = new Intent(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();}}}

//第二个界面

package com.example.testbaseactivity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class SecondActivity extends MyBaseActivity implements OnClickListener{private Button btn;@Overridepublic void onBaseCreare(Bundle bundle) {setContentViewId(R.layout.activity_second);btn = (Button) findViewById(R.id.button1_second);btn.setOnClickListener(this);}@Overridepublic void initView() {setTime();setTitle("SecondActivity");}@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(arg0.equals(btn)){finish();}}}

//manifest.xml

    
    
        
            
                
                
            
                
                
            给出效果图