Android中仿IOS提示框的實(shí)現(xiàn)方法
前言
在Android開(kāi)發(fā)中,我們有時(shí)需要實(shí)現(xiàn)類(lèi)似IOS的對(duì)話(huà)框。今天我就來(lái)總結(jié)下,如何通過(guò)自定義的開(kāi)發(fā)來(lái)實(shí)現(xiàn)類(lèi)似的功能。
自定義Dialog
我們知道Android中最常用的對(duì)話(huà)框就是Dialog及其派生類(lèi)。這次我們通過(guò)組合的方式來(lái)實(shí)現(xiàn)一個(gè)類(lèi)似IOS對(duì)話(huà)框的效果。我們先來(lái)看一下布局效果,這個(gè)相信大家都能弄出來(lái),在這里我就貼一下最后的效果圖(注意:對(duì)話(huà)框的邊緣是圓角的)。
效果圖如下:
我們看到,這個(gè)和IOS的對(duì)話(huà)框已經(jīng)非常相似了,后面我們需要做的就是將其作為一個(gè)組件封裝起來(lái),實(shí)現(xiàn)AlertDialog那樣的調(diào)用方式提供給調(diào)用者使用。下面我們來(lái)看一下整個(gè)的封裝過(guò)程。
1、組合使用Dialog進(jìn)行對(duì)象的構(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彈出后會(huì)點(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對(duì)象,然后通過(guò)解析樣式文件(XML)通過(guò)setContentView方法添加到生成的Dialog對(duì)象中。下面的代碼我們看到通過(guò)解析XML樣式文件,來(lái)設(shè)置Dialog顯示的文本、取消、確認(rèn)按鈕觸發(fā)的事件等操作。重點(diǎn)在最后一行代碼return this而不是mDialog。因?yàn)橥ㄟ^(guò)返回this對(duì)象我們可以使用“鏈?zhǔn)秸{(diào)用”來(lái)不斷的進(jìn)行調(diào)用設(shè)置等操作,類(lèi)似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等方法,我們直接將事件處理對(duì)象傳遞進(jìn)來(lái)了。下面我們來(lái)看下自定義控件的字段定義。代碼如下:
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對(duì)象,通過(guò)組合的方式我們?cè)诿恳粋€(gè)BaseDialog對(duì)象內(nèi)部都會(huì)有一個(gè)Dialog對(duì)象,BaseDailog對(duì)象只是提供了一些外圍的顯示功能。核心的例如隱藏、顯示、彈出效果等方式依賴(lài)于嵌入的mDialog對(duì)象的。
下面我們來(lái)看一下自定義Dialog的調(diào)用方式。代碼如下:
/** * 彈出電話(huà)確認(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();
我們看到,調(diào)用方式和AlertDialog的使用方式很相似。
以上這篇Android中仿IOS提示框的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- android 彈出提示框的使用(圖文實(shí)例)
- Android使用Toast顯示消息提示框
- android實(shí)現(xiàn)彈出提示框
- Android仿QQ、微信聊天界面長(zhǎng)按提示框效果
- Android編程之自定義AlertDialog(退出提示框)用法實(shí)例
- Android仿IOS自定義AlertDialog提示框
- Android仿百度谷歌搜索自動(dòng)提示框AutoCompleteTextView簡(jiǎn)單應(yīng)用示例
- Android超實(shí)用的Toast提示框優(yōu)化分享
- Android模擬美團(tuán)客戶(hù)端進(jìn)度提示框
- Android模仿Toast實(shí)現(xiàn)提示框效果
相關(guān)文章
Android Dialog中軟鍵盤(pán)的顯示與隱藏的示例
本篇文章主要介紹Android Dialog中軟鍵盤(pán)的顯示與隱藏的示例,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02Android App中制作仿MIUI的Tab切換效果的實(shí)例分享
這篇文章主要介紹了Android App中制作仿MIUI的Tab切換效果的實(shí)例分享,實(shí)現(xiàn)具有跟隨手指滾動(dòng)而滾動(dòng)功能的ViewPagerIndicator,需要的朋友可以參考下2016-04-04Android?Camera+SurfaceView自動(dòng)聚焦防止變形拉伸
這篇文章主要為大家介紹了Android自定義相機(jī)Camera+SurfaceView實(shí)現(xiàn)自動(dòng)聚焦防止變形拉伸詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Kotlin語(yǔ)言使用BroadcastReceiver示例介紹
Android開(kāi)發(fā)的四大組件分別是:活動(dòng)(activity),用于表現(xiàn)功能;服務(wù)(service),后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù),本篇著重介紹廣播組件2022-09-09Android中二維碼的掃描和生成(使用zxing庫(kù))
ZXing是一個(gè)開(kāi)放源碼的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫(kù),它包含了聯(lián)系到其他語(yǔ)言的端口,下面這篇文章主要給大家介紹了關(guān)于Android中二維碼掃描和生成的相關(guān)資料,主要使用的zxing庫(kù),需要的朋友可以參考下2022-09-09Android實(shí)現(xiàn)九宮格(GridView中各項(xiàng)平分空間)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)九宮格(GridView中各項(xiàng)平分空間)的方法,涉及Android針對(duì)GridView操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06Android 動(dòng)態(tài)改變SeekBar進(jìn)度條顏色與滑塊顏色的實(shí)例代碼
在上次android開(kāi)發(fā)的項(xiàng)目中遇到個(gè)這樣的需求,要?jiǎng)討B(tài)改變seekbar進(jìn)度條顏色與滑塊顏色的需求,實(shí)現(xiàn)代碼也算比較簡(jiǎn)單,對(duì)實(shí)現(xiàn)過(guò)程感興趣的朋友可以通過(guò)本文學(xué)習(xí)下2016-11-11使用Messenger實(shí)現(xiàn)Service的雙向通信
這篇文章主要為大家詳細(xì)介紹了使用Messenger實(shí)現(xiàn)Service的雙向通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05