Android中仿IOS提示框的實(shí)現(xiàn)方法
前言
在Android開(kāi)發(fā)中,我們有時(shí)需要實(shí)現(xiàn)類似IOS的對(duì)話框。今天我就來(lái)總結(jié)下,如何通過(guò)自定義的開(kāi)發(fā)來(lái)實(shí)現(xiàn)類似的功能。
自定義Dialog
我們知道Android中最常用的對(duì)話框就是Dialog及其派生類。這次我們通過(guò)組合的方式來(lái)實(shí)現(xiàn)一個(gè)類似IOS對(duì)話框的效果。我們先來(lái)看一下布局效果,這個(gè)相信大家都能弄出來(lái),在這里我就貼一下最后的效果圖(注意:對(duì)話框的邊緣是圓角的)。
效果圖如下:

我們看到,這個(gè)和IOS的對(duì)話框已經(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è)置等操作,類似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ì)象只是提供了一些外圍的顯示功能。核心的例如隱藏、顯示、彈出效果等方式依賴于嵌入的mDialog對(duì)象的。
下面我們來(lái)看一下自定義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();
我們看到,調(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)客戶端進(jìn)度提示框
- Android模仿Toast實(shí)現(xiàn)提示框效果
相關(guān)文章
Android判斷屏幕是橫屏或是豎屏的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Android判斷屏幕是橫屏或是豎屏的簡(jiǎn)單實(shí)現(xiàn)方法,是Android應(yīng)用開(kāi)發(fā)中常用的功能,需要的朋友可以參考下2014-07-07
Android使用Flutter實(shí)現(xiàn)錄音插件
這篇文章主要介紹了基于flutter實(shí)現(xiàn)錄音功能,介紹了如何錄音,如何把文件存放到本地,這些都是我們平常使用這個(gè)功能會(huì)遇到的問(wèn)題。在使用的過(guò)程中遇到的問(wèn)題也有列出,需要的朋友可以參考下2022-08-08
Android BottomNavigationBar底部導(dǎo)航控制器使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android BottomNavigationBar底部導(dǎo)航控制器使用方法,感興趣的小伙伴們可以參考一下2016-03-03
iOS開(kāi)發(fā)中TableView類似QQ分組的折疊與展開(kāi)效果
這篇文章主要介紹了iOS開(kāi)發(fā)中TableView類似QQ分組的折疊與展開(kāi)效果,其實(shí)要做這個(gè)效果我先想到的是在tableView中再嵌套多個(gè)tableView。下面通過(guò)本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下2016-12-12
Android 校驗(yàn)email是否合法實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 校驗(yàn)email是否合法實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
利用Jetpack Compose實(shí)現(xiàn)主題切換功能
這篇文章主要介紹了如何利用Android中的Jetpack Compose實(shí)現(xiàn)主題切換功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-01-01
Android在項(xiàng)目中接入騰訊TBS瀏覽器WebView的教程與注意的地方
今天小編就為大家分享一篇關(guān)于Android在項(xiàng)目中接入騰訊TBS瀏覽器WebView的教程與注意的地方,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
Android開(kāi)發(fā)教程之調(diào)用攝像頭功能的方法詳解
這篇文章主要介紹了Android調(diào)用攝像頭功能的方法,詳細(xì)分析了Android調(diào)用攝像頭功能的權(quán)限設(shè)置、功能代碼與實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-06-06

