您好,登錄后才能下訂單哦!
這篇文章主要介紹Android中如何實(shí)現(xiàn)仿IOS提示框,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
自定義Dialog
我們知道Android中最常用的對話框就是Dialog及其派生類。這次我們通過組合的方式來實(shí)現(xiàn)一個(gè)類似IOS對話框的效果。我們先來看一下布局效果,這個(gè)相信大家都能弄出來,在這里我就貼一下最后的效果圖(注意:對話框的邊緣是圓角的)。
效果圖如下:
我們看到,這個(gè)和IOS的對話框已經(jīng)非常相似了,后面我們需要做的就是將其作為一個(gè)組件封裝起來,實(shí)現(xiàn)AlertDialog那樣的調(diào)用方式提供給調(diào)用者使用。下面我們來看一下整個(gè)的封裝過程。
1、組合使用Dialog進(jìn)行對象的構(gòu)建
/** * 創(chuàng)建BaseDialog實(shí)例 * @return */ public BaseDialog builder(){ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mDialog = new Dialog(mContext, R.style.Dialog); //設(shè)置dialog彈出后會點(diǎn)擊屏幕,dialog不消失;點(diǎn)擊物理返回鍵dialog消失 mDialog.setCanceledOnTouchOutside(false); View layout = inflater.inflate(R.layout.dialog_normal_layout, null); mDialog.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); //設(shè)置Dialog中展示的msg mMessage=(TextView) layout.findViewById(R.id.txtMsg); //設(shè)置確認(rèn)按鈕的處理事件 mPositiveBtnText=(TextView) layout.findViewById(R.id.txtSubmit); mPositiveBtnText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mPositiveBtnClickListener != null) { mPositiveBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_POSITIVE); } } }); mNegativeBtnText=(TextView) layout.findViewById(R.id.txtCancle); mNegativeBtnText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mNegativeBtnClickListener!=null) { mNegativeBtnClickListener.onClick(mDialog, DialogInterface.BUTTON_NEGATIVE); } } }); mDialog.setContentView(layout); return this; }
在這段代碼中,我們看到第7行代碼生成一個(gè)Dialog對象,然后通過解析樣式文件(XML)通過setContentView方法添加到生成的Dialog對象中。下面的代碼我們看到通過解析XML樣式文件,來設(shè)置Dialog顯示的文本、取消、確認(rèn)按鈕觸發(fā)的事件等操作。重點(diǎn)在最后一行代碼return this而不是mDialog。因?yàn)橥ㄟ^返回this對象我們可以使用“鏈?zhǔn)秸{(diào)用”來不斷的進(jìn)行調(diào)用設(shè)置等操作,類似Android中的AlertDialog使用方式。
2、自定義Dialog的一些設(shè)置
/** * 設(shè)置Msg * 支持Resource設(shè)置 * @param message */ public BaseDialog setMessage(int message){ mMessage.setText(mContext.getText(message).toString()); return this; } /** * 設(shè)置Msg * @param message */ public BaseDialog setMessage(String message){ mMessage.setText(message); return this; } public BaseDialog setPositiveButton(int positiveBtnText,DialogInterface.OnClickListener listener) { mPositiveBtnText.setText(mContext.getText(positiveBtnText)); mPositiveBtnClickListener = listener; return this; } public BaseDialog setPositiveButton(String positiveBtnText,DialogInterface.OnClickListener listener){ mPositiveBtnText.setText(positiveBtnText); mPositiveBtnClickListener=listener; return this; } public BaseDialog setNegativeButton(int negativeBtnText,DialogInterface.OnClickListener listener){ mNegativeBtnText.setText(mContext.getText(negativeBtnText)); mNegativeBtnClickListener=listener; return this; } public BaseDialog setNegativeButton(String negativeBtnText,DialogInterface.OnClickListener listener){ mNegativeBtnText.setText(negativeBtnText); mNegativeBtnClickListener=listener; return this; } public void show(){ mDialog.show(); }
我們看到我們提供了幾個(gè)比較常用的函數(shù)。特別是setPositiveButton等方法,我們直接將事件處理對象傳遞進(jìn)來了。下面我們來看下自定義控件的字段定義。代碼如下:
public BaseDialog(Context context){ mContext=context; } private Dialog mDialog; protected Context mContext; protected TextView mMessage; protected TextView mPositiveBtnText; protected TextView mNegativeBtnText; protected DialogInterface.OnClickListener mPositiveBtnClickListener; protected DialogInterface.OnClickListener mNegativeBtnClickListener;
我們看到整個(gè)自定義Dialog的核心就是mDialog對象,通過組合的方式我們在每一個(gè)BaseDialog對象內(nèi)部都會有一個(gè)Dialog對象,BaseDailog對象只是提供了一些外圍的顯示功能。核心的例如隱藏、顯示、彈出效果等方式依賴于嵌入的mDialog對象的。
下面我們來看一下自定義Dialog的調(diào)用方式。代碼如下:
/** * 彈出電話確認(rèn)按鈕 */ new BaseDialog(getActivity()) .builder() .setMessage("15895991339") .setPositiveButton("確認(rèn)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:15895991339")); startActivity(intent); dialog.dismiss(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show();
以上是“Android中如何實(shí)現(xiàn)仿IOS提示框”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。