本文是針對AndBase架構學習整理的第二篇筆記,想要瞭解AndBase架構的朋友可以閱讀本文,大家共同學習。
使用AbActivity內部封裝的方法實現進度框,Toast框,彈出框,確認框
AndBase中AbActivity封裝好了許多方法提供我們去使用,使得在使用的時候更加的方便,只需要傳遞相關參數即可..省去了我們自己使用基礎的函數進行構造...
就好比進度框,Toast框,彈出框,確認框...這些基本的東西都在AndBase的AbActivity封裝好了...我們只需要傳遞參數調用其中內部的方法就可以完成這些視圖的建立...無論是進度條的調用,還是Toast框,還是彈出框,確認框(確認框和彈出框基本相似),只是確認框比彈出框多了一些相關控制項而已,彈出框一般用於直接彈出一段文本資訊,而去確認框則還需要添加相關的按鈕...總之調用的方式也就非常的簡單...
/* * * 多功能菜單... * * */package com.example.andbaseanotheractivity;import com.ab.activity.AbActivity;import com.ab.global.AbConstant;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends AbActivity implements View.OnClickListener { private Button but[]=new Button[6]; private View view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setAbContentView(R.layout.activity_main); InitFindID(); } public void InitFindID(){ for(int i=0;i<but.length;i++){ String resID="but_"+i; but[i]=(Button) findViewById(this.getResources().getIdentifier(resID, "id", "com.example.andbaseanotheractivity")); //尋找ID的一種比較好的方式..這種方式的使用前提是ID的定義一定要有一定的規則... but[i].setOnClickListener(this); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { // TODO Auto-generated method stub view=mInflater.inflate(R.layout.demo_text, null); switch(v.getId()){ case R.id.but_0: showProgressDialog(); //直接彈出圓形進度框... break; case R.id.but_1: showToast("Toast文字框"); //Toast文字框... break; case R.id.but_2: showDialog(AbConstant.DIALOGTOP, view); //彈出框..傳遞參數為顯示的位置以及顯示的視圖...這裡表示在最上方彈出... break; case R.id.but_3: showDialog(AbConstant.DIALOGCENTER, view); // break; case R.id.but_4: showDialog(AbConstant.DIALOGBOTTOM, view); break; case R.id.but_5: //可以看到確認框也是調用showDialog方法..只是傳遞的參數不相同..AbActivity也針對這幾種不同的彈出框定義了不同的方法... showDialog("標題", "描述", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub showToast("點擊確認"); } }); break; } }}
這裡我們可以看到,只需要調用相關的方法,傳遞相關的參數就能夠完成這些基本View的建立..從而使得我們的操作更加的方便...
以前的Toast資訊彈出框調用的方式:
Toast.makeText(getApplicationContext(),"需要想要顯示的資訊",Toast.LENGTH).show();
現在的方式就是這樣:
showToast("需要顯示的資訊");
這樣直接就可以完成Toast資訊框的顯示..對於這樣的簡單方式的封裝,可能我們不以為然..但是如果是更多的代碼量呢?就拿我們的確認彈出框來說吧...如果是在以往的Activity中書寫一個確認彈出框,我們需要手動去進行重寫...下面就是基於Activity來手寫的一個確認框...
AlertDialog.Builder builder=new Builder(MainActivity.this);builder.setTitle("提示");builder.setMessage("確認退出");builder.setPositiveButton("確認", new OnClickListener() { //添加確認按鈕... @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); /提示框消失.. } });builder.setNegativeButton("取消", new OnClickListener() { //添加取消按鈕.. @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); } });
使用AndBase架構通過調用函數的方式,這樣就使得這個過程就非常的簡單..我們只需要傳遞相關的參數調用方法就可以了...這個函數的調用和上面的書寫方式所帶來的效果是相同的,並且這裡我們不需要再設定dialog.dismiss();只要點擊了按鈕,那麼彈出框就會消失...這裡的OnClick方法是後續彈出框消失後需要執行的操作...相比而言,使用架構還是簡化了代碼量
showDialog("提示", "確認退出", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub showToast("點擊確認"); } });
其實這些簡單的View還是非常的簡單的...雖然看起來代碼量減少的並不是非常的多,但是如果對於更加複雜的操作...架構中最佳化好的方法還是非常的好用的...即減少了代碼的冗餘度,而且還實現了更多的功能...
還是看一下源碼的實現過程吧...
Toast框的源碼實現過程...我們可以看到,架構中的方法把原生態的方法進行了封裝,我們只需要傳遞相關參數就可以直接使用Toast框...其實源碼內部還有showToastInThread()的源碼..通過開啟一個新的線程
/** * 描述:Toast提示文本. * @param text 文本 */ public void showToast(String text) { Toast.makeText(this,""+text, Toast.LENGTH_SHORT).show(); //這裡已經把這個方法封裝好了...我們只需要傳遞需要顯示的文本就行了... } /** * 描述:Toast提示文本. * @param resId 文本的資源ID */ public void showToast(int resId) { Toast.makeText(this,""+this.getResources().getText(resId), Toast.LENGTH_SHORT).show(); //這種方法則是通過resID來設定需要顯示的文本... }
進度框的源碼實現過程...源碼非常的簡單...我們在使用一個進度條的時候只需要調用這兩種方法就可以了...
/** * 描述:顯示進度框. */ public void showProgressDialog() { showProgressDialog(null); //沒有顯示進度的進度框.. } /** * 描述:顯示進度框. * @param message the message */ public void showProgressDialog(String message) { // 建立一個顯示進度的Dialog if(!AbStrUtil.isEmpty(message)){ mProgressMessage = message; //設定進度框顯示的資訊... } if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); // 設定點擊螢幕Dialog不消失 mProgressDialog.setCanceledOnTouchOutside(false); } mProgressDialog.setMessage(mProgressMessage);//設定進度框顯示的訊息.. showDialog(AbConstant.DIALOGPROGRESS); }
彈出框的源碼我就不進行粘貼了,由於源碼寫的確實有點多...這裡就只粘貼一下封裝的方法...
這個方法顯示的對話方塊是一個資訊彈出框,沒有按鈕,只是進行資訊的提示...id的作用設定彈出框顯示的位置...View表示需要顯示的視圖...這樣就建立了一個彈出框在指定的位置進行顯示...
public void showDialog(int id,View view) {}
上面方法的執行過程中,會調用setDialogLayoutParams()函數去設定相關屬性,設定彈出框布局的參數,也就是彈出框如何在螢幕上更好的顯示的一個設定...
這是源碼的調用過程,看起來並不是很難理解...
private void setDialogLayoutParams(Dialog dialog,int dialogPadding,int gravity){ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //設定沒有標題.. Window window = dialog.getWindow(); //擷取視窗... WindowManager.LayoutParams lp = window.getAttributes();//擷取視窗屬性... //此處可以設定dialog顯示的位置 window.setGravity(gravity); //設定視窗的對其方式... //設定寬度 lp.width = diaplayWidth-dialogPadding; lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; //背景透明 //lp.screenBrightness = 0.2f; lp.alpha = 0.8f; lp.dimAmount = 0f; window.setAttributes(lp); // 添加動畫 window.setWindowAnimations(android.R.style.Animation_Dialog); // 設定點擊螢幕Dialog不消失 dialog.setCanceledOnTouchOutside(false); }
這個方法的彈出框是一個帶有按鈕的確認框,title和msg表示對話方塊的標題內容和提示內容...以及點擊確認按鈕時發生的監聽事件的傳遞...
public void showDialog(String title,String msg,DialogInterface.OnClickListener mOkOnClickListener) {}
這個方法的彈出框和上面的唯一區別就是,彈出框的內容不是指定的字串,而是一個我們自訂的一個視圖..
public AlertDialog showDialog(String title,View view,DialogInterface.OnClickListener mOkOnClickListener) {}
彈出框基本都是這些模式...源碼的實現非常的簡單...原理都是對那些基本函數的一些封裝...剩下的幾個就不粘貼了..萬變不離其宗。
以上就是本文的全部內容,希望對大家的學習有所協助。