在開(kāi)發(fā)Android應(yīng)用中,有時(shí)候會(huì)在多個(gè)界面中出現(xiàn)同樣的布局
專(zhuān)注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)百色免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
如在頂部或底部顯示菜單欄,時(shí)間顯示等。為了避免麻煩,不用
在每個(gè)界面都布局,這個(gè)時(shí)候我們用到了BaseActivity(不是系統(tǒng)
的自己定義的)在BaseActivity布局里,我們可以把公用的布局先
寫(xiě)出來(lái),如界面頂部有返回按鈕,有當(dāng)前界面Title。在界面底部有
時(shí)間顯示欄,且時(shí)間和系統(tǒng)時(shí)間同步,不斷刷新。在BaseActivity
的布局里,我們留出LinearLayout這樣一個(gè)線(xiàn)性布局,并且設(shè)置屬性
id,這樣其他界面的layout放置到這個(gè)LinearLayout里就可以了。
我們看一下具體的使用步驟:
1、定義一個(gè)公用類(lèi)的Activity我這里叫MyBaseActivity繼承Activity
并且該MyBaseActivity為抽象類(lèi)abstract,因?yàn)槔锩嬗谐橄蠓椒?/p>
2、定義一個(gè)基本類(lèi)如FirstActivity繼承MyBaseActivity并實(shí)現(xiàn)
MyBaseActivity里面的抽象方法
3、在MyBaseActivity類(lèi)中有兩個(gè)抽象方法onBaseCreare(Bundle bundle)
和initView()其中 onBaseCreare()方法顧名思義是實(shí)現(xiàn)界面顯示的也就
是類(lèi)似于onCreate()中的setContentView(layout),initView()方法用于
初始化一些數(shù)據(jù),如Title的設(shè)置,時(shí)間顯示等。
4、在MyBaseActivity類(lèi)中有g(shù)etbtn_left()方法,可獲取公共控件的控制。
貼出詳細(xì)代碼:
先看xml布局:
//activity_my_base.xml
//activity_first.xml
//activity_second.xml
//接下來(lái)看一下類(lèi)中的源碼
首先是公共類(lèi) 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{ // 內(nèi)容區(qū)域的布局 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); /** * 初始化數(shù)據(jù) */ public abstract void initView(); /** * 底部欄刷新時(shí)間 * 刷新間隔1s */ public void setTime() { int delay = 0; int period = 1000;// 循環(huán)間隔 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(); // 當(dāng)前時(shí)間 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.format(nowdate); } /** * 設(shè)置標(biāo)題 * * @param title */ public void setTitle(String title) { if (null != tv) { tv.setText(title); } } /** * 隱藏上方的標(biāo)題欄 */ 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(); } } }
//第一個(gè)界面 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(); } } }
//第二個(gè)界面
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
給出效果圖