android自定义对话框
来源:互联网 发布:武汉软件新城论坛 编辑:程序博客网 时间:2024/05/16 10:41
继上一篇《android系统自带对话框》,在我们android的开发中,系统自带的对话框已经远远不能满足我们的需求,所以一款软件要有自己独特风格,一般都会采用自定义对话框。
简单的总结:自定义对话框有如下步骤。
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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});promptDialog.setOnCancelButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});promptDialog.create().show();
以上是自定义对话框中的常用的一种,还有自定义单选对话框和自定义多选对话框。其实现的技术都差不多,如果第一种会的话,其他应该没不是问题。
点击下载源码
1 0
- android中的对话框:自定义对话框
- Android Dialog( 自定义对话框)
- android 自定义对话框
- android自定义对话框
- Android自定义对话框
- android 自定义对话框
- Android自定义Dialog对话框
- android自定义大小对话框
- android自定义对话框
- Android自定义对话框
- android 自定义对话框
- android 自定义对话框
- android自定义对话框
- android 自定义对话框动画
- Android弹出自定义对话框
- android自定义对话框
- android 自定义对话框
- Android自定义对话框
- POJ - 2352 - Stars (树状数组!!)
- 艾瑞网站排名 - B2B网站
- java验证身份证号码是否有效源代码
- 自动化装备展
- 媲美韩寒 上海传智学员佳作《钥匙》
- android自定义对话框
- 【控制文件丢失-恢复-1】
- 01(CodeforcesC水平)CQU新生周末狂欢赛O- Pocket Book
- 绑定自定义类到Runtime(Lua-binding)
- 关于判断cpu大端存储还是小端存储的讨论与分析
- 让 table 的 table td边框合并的方法
- Floyd_Warshall Algorithm
- 解决进行Android开发环境搭建时下载速度慢的问题
- LDA文本建模