在开发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; @Override protected 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;// 循环间隔 1000ms java.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; } @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(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; @Override public void onBaseCreare(Bundle bundle) { setContentViewId(R.layout.activity_first); btn_left = getbtn_left(); btn_right = getbtn_right(); findViewById(); } @Override public 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); } @Override public 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; @Override public void onBaseCreare(Bundle bundle) { setContentViewId(R.layout.activity_second); btn = (Button) findViewById(R.id.button1_second); btn.setOnClickListener(this); } @Override public void initView() { setTime(); setTitle("SecondActivity"); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(arg0.equals(btn)){ finish(); } } }
//manifest.xml
给出效果图