android自定义对话框
2014-12-27 16:06
218 查看
继上一篇《android系统自带对话框》,在我们android的开发中,系统自带的对话框已经远远不能满足我们的需求,所以一款软件要有自己独特风格,一般都会采用自定义对话框。
简单的总结:自定义对话框有如下步骤。
1.自定义对话框样式(R.style.xxx)
2.自定义对话框布局(R.layout.xxx)
3.通过Dialog构建对话框(Dialog.setContentView(R.layout.xxx))
4.处理事件和业务逻辑(按钮,列表,复选框等等)
1)自定对话框样式:/项目/res/values/styles.xml
值得注意的是,当我们修改了android:windowBackground为透明以后,会出现如下的现象(在自定义布局中会作处理):
2)自定义布局
处理对话框出现全屏的现象。
布局代码如下:
3.通过DIalog构建对话框(这里继承了Dialog)
1.直接通过构造函数对样式(R.style.MyDialog)和布局(R.layout.dialog_standard)进行加载;
2.通过create(),创建对话框,事件和业务逻辑基本都是在这里处理的;
3.通过show()方法显示对话框。
4)事件和业务逻辑处理
要处理的事件和业务逻辑比较简单,主要是对两个按钮的处理,通过对外提供接口的形式,
设置确定按钮
设置取消按钮
对外提供按钮处理接口:
onConfirmListener.onClick(PromptDialog.this, BUTTON_CONFIRM);
5.MainActivity:创建自定义对话框
以上是自定义对话框中的常用的一种,还有自定义单选对话框和自定义多选对话框。其实现的技术都差不多,如果第一种会的话,其他应该没不是问题。
点击下载源码
简单的总结:自定义对话框有如下步骤。
1.自定义对话框样式(R.style.xxx)
2.自定义对话框布局(R.layout.xxx)
3.通过Dialog构建对话框(Dialog.setContentView(R.layout.xxx))
4.处理事件和业务逻辑(按钮,列表,复选框等等)
1)自定对话框样式:/项目/res/values/styles.xml
<style name="MyDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> </style>这里继承了对话框的样式,只对 android:windowBackground (对话框背景:透明)和 windowNoTitle(没有标题)作了修改。
值得注意的是,当我们修改了android:windowBackground为透明以后,会出现如下的现象(在自定义布局中会作处理):
2)自定义布局
处理对话框出现全屏的现象。
android:background="@android:color/transparent" android:padding="20dp"
布局代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:padding="20dp" > <LinearLayout android:id="@+id/info_ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="vertical" > <TextView android:id="@+id/title_tv" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center_vertical" android:paddingLeft="10dp" android:text="这是标题" android:textColor="@android:color/black" android:textSize="18sp" android:textStyle="bold" /> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#008BCC" /> <ScrollView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > <TextView android:id="@+id/msg_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:minHeight="80dp" android:paddingLeft="10dp" android:text="这是内容,你确定要退出吗?" android:textColor="@android:color/black" android:textSize="15sp" /> </ScrollView> <LinearLayout android:id="@+id/bottom_ll" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:padding="3dp" > <Button android:id="@+id/confirm_btn" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="确定" android:textColor="@android:color/black" android:textSize="18sp" /> <Button android:id="@+id/cancel_btn" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="取消" android:textColor="@android:color/black" android:textSize="18sp" /> </LinearLayout> </LinearLayout> </RelativeLayout>
3.通过DIalog构建对话框(这里继承了Dialog)
1.直接通过构造函数对样式(R.style.MyDialog)和布局(R.layout.dialog_standard)进行加载;
2.通过create(),创建对话框,事件和业务逻辑基本都是在这里处理的;
3.通过show()方法显示对话框。
public class PromptDialog extends Dialog implements DialogInterface { public static final int BUTTON_CONFIRM = -1; public static final int BUTTON_CANCEL = -2; private TextView mTitleTv, mMsgTv; private Button mCancelBtn, mConfirmBtn; private String mCancelName, mConfirmName; private String mTitle, mMsg; private OnClickListener onCancelListener, onConfirmListener; public PromptDialog(Context context, String title, String msg) { super(context, R.style.MyDialog); setContentView(R.layout.dialog_standard); mTitleTv = (TextView) this.findViewById(R.id.title_tv); mMsgTv = (TextView) this.findViewById(R.id.msg_tv); mConfirmBtn = (Button) this.findViewById(R.id.confirm_btn); mCancelBtn = (Button) this.findViewById(R.id.cancel_btn); this.mTitle = title; this.mMsg = msg; } public PromptDialog(Context context) { this(context, null, null); } /** * 设置确定按钮 * * @param btnName * 按钮名称 * @param onClickListener * 按钮监听 * @return PromptDialog */ public PromptDialog setOnConfirmButton(String btnName, OnClickListener onClickListener) { this.mConfirmName = btnName; this.onConfirmListener = onClickListener; return this; } /** * 设置取消按钮 * * @param btnName * 按钮名称 * @param onClickListener * 按钮监听 * @return PromptDialog */ public PromptDialog setOnCancelButton(String btnName, OnClickListener onClickListener) { this.mCancelName = btnName; this.onCancelListener = onClickListener; return this; } /** * 设置标题 * * @param title * @return PromptDialog */ public PromptDialog setTitle(String title) { this.mTitle = title; return this; } /** * 设置消息内容 * * @param msg * @return PromptDialog */ public PromptDialog setMessage(String msg) { this.mMsg = msg; return this; } public PromptDialog create() { if (mTitle == null) { mTitleTv.setVisibility(View.GONE); } else { mTitleTv.setText(mTitle); } if (mMsg == null) { mMsgTv.setVisibility(View.GONE); } else { mMsgTv.setText(mMsg); } if (onConfirmListener != null) { mConfirmBtn.setText(mConfirmName); mConfirmBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onConfirmListener .onClick(PromptDialog.this, BUTTON_CONFIRM); } }); } else { mConfirmBtn.setVisibility(View.GONE); } if (onCancelListener != null) { mCancelBtn.setText(mCancelName); mCancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onConfirmListener.onClick(PromptDialog.this, BUTTON_CANCEL); } }); } else { mCancelBtn.setVisibility(View.GONE); } return this; } }
4)事件和业务逻辑处理
要处理的事件和业务逻辑比较简单,主要是对两个按钮的处理,通过对外提供接口的形式,
private OnClickListener onCancelListener, onConfirmListener;
设置确定按钮
public PromptDialog setOnConfirmButton(String btnName, OnClickListener onClickListener) { this.mConfirmName = btnName; this.onConfirmListener = onClickListener; return this; }
设置取消按钮
public PromptDialog setOnCancelButton(String btnName, OnClickListener onClickListener) { this.mCancelName = btnName; this.onCancelListener = onClickListener; return this; }
对外提供按钮处理接口:
onConfirmListener.onClick(PromptDialog.this, BUTTON_CONFIRM);
<span style="white-space:pre"> </span>if (onConfirmListener != null) { mConfirmBtn.setText(mConfirmName); mConfirmBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onConfirmListener .onClick(PromptDialog.this, BUTTON_CONFIRM); } }); } else { mConfirmBtn.setVisibility(View.GONE); } if (onCancelListener != null) { mCancelBtn.setText(mCancelName); mCancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onConfirmListener.onClick(PromptDialog.this, BUTTON_CANCEL); } }); } else { mCancelBtn.setVisibility(View.GONE); }
5.MainActivity:创建自定义对话框
<span style="white-space:pre"> </span>PromptDialog promptDialog = new PromptDialog(mContext, "提示", "你确定要退出?"); promptDialog.setOnConfirmButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); promptDialog.setOnCancelButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); promptDialog.create().show();
以上是自定义对话框中的常用的一种,还有自定义单选对话框和自定义多选对话框。其实现的技术都差不多,如果第一种会的话,其他应该没不是问题。
点击下载源码
相关文章推荐
- Android---功能模块一之颜色选择器自定义Preference 对话框
- Android自定义对话框列表
- Android自定义对话框的大小
- Android对话框的自定义及透明效果
- android自定义大小对话框
- android 自定义对话框 背景透明
- Android自定义Dialog对话框
- Android自定义对话框
- android 自定义对话框 背景透明
- android自定义对话框
- 20. android dialog——自定义对话框之一
- Android简明开发教程十八:自定义对话框 Transform
- Android简明开发教程十八:自定义对话框 Transform
- Android 对话框进阶(自定义)
- android自定义对话框
- Android Dialog( 自定义对话框)
- Android简明开发教程十八:自定义对话框 Transform
- android 自定义对话框
- android Dialog 各种Dialog 三个选项的、进度条的、单选的、多选的、自定义的对话框
- android Dialog 各种Dialog 三个选项的、进度条的、单选的、多选的、自定义的对话框