国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中仿IOS提示框的實(shí)現(xiàn)方法

2019-12-12 01:20:32
字體:
供稿:網(wǎng)友

前言

在Android開發(fā)中,我們有時(shí)需要實(shí)現(xiàn)類似IOS的對(duì)話框。今天我就來總結(jié)下,如何通過自定義的開發(fā)來實(shí)現(xiàn)類似的功能。

自定義Dialog

我們知道Android中最常用的對(duì)話框就是Dialog及其派生類。這次我們通過組合的方式來實(shí)現(xiàn)一個(gè)類似IOS對(duì)話框的效果。我們先來看一下布局效果,這個(gè)相信大家都能弄出來,在這里我就貼一下最后的效果圖(注意:對(duì)話框的邊緣是圓角的)。

效果圖如下:

我們看到,這個(gè)和IOS的對(duì)話框已經(jīng)非常相似了,后面我們需要做的就是將其作為一個(gè)組件封裝起來,實(shí)現(xiàn)AlertDialog那樣的調(diào)用方式提供給調(diào)用者使用。下面我們來看一下整個(gè)的封裝過程。

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ì)象,然后通過解析樣式文件(XML)通過setContentView方法添加到生成的Dialog對(duì)象中。下面的代碼我們看到通過解析XML樣式文件,來設(shè)置Dialog顯示的文本、取消、確認(rèn)按鈕觸發(fā)的事件等操作。重點(diǎn)在最后一行代碼return this而不是mDialog。因?yàn)橥ㄟ^返回this對(duì)象我們可以使用“鏈?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等方法,我們直接將事件處理對(duì)象傳遞進(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對(duì)象,通過組合的方式我們?cè)诿恳粋€(gè)BaseDialog對(duì)象內(nèi)部都會(huì)有一個(gè)Dialog對(duì)象,BaseDailog對(duì)象只是提供了一些外圍的顯示功能。核心的例如隱藏、顯示、彈出效果等方式依賴于嵌入的mDialog對(duì)象的。

下面我們來看一下自定義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è)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁陵县| 辉南县| 常德市| 杨浦区| 德州市| 禹州市| 专栏| 福贡县| 理塘县| 晋城| 衡阳市| 麻城市| 屯门区| 凤山县| 黄陵县| 平安县| 柏乡县| 佳木斯市| 德庆县| 定结县| 泰兴市| 喀喇沁旗| 寿阳县| 石渠县| 海城市| 旬邑县| 巴彦淖尔市| 九龙坡区| 古交市| 通山县| 永吉县| 朝阳市| 乌兰察布市| 洪雅县| 营山县| 商都县| 望谟县| 天门市| 那坡县| 莎车县| 腾冲县|