关于自定义Dialog的那些事

Dialog也就是传说中的弹出框,系统自带的一些布局和功能比较简单,一般来说满足不了开发的需求,因此,需要我们自己动手,来实现一个自定义的Dialog。

首先,如果要实现一个自己的Dialog,我们需要继承自Dialog。Dialog的构造函数一共有三种格式,我们至少需要生命其中的一种形式,才能够使用。

构造函数的格式如下:

1.public MyCameraDialog(Context context,
boolean cancelable,

OnCancelListener cancelListener) {

super(context, cancelable, cancelListener);

}

2.public MyCameraDialog(Context context,
int theme) {

super(context, theme);

}

3.public MyCameraDialog(Context context) {

super(context);

}

在这三种构造函数,我们最常用的是第二种,也就是需要上下文对象和样式的构造函数,当我们使用这个构造函数的时候,我们需要指定一个样式,比如说是没有标题等。

当然,我们可以用第三个构造函数,只传入一个上下文对象,然后设置一个我们指定的默认的样式。就像下面这样:

public MyCameraDialog(Context context) {

this(context,R.style.MyStyle);

}

这样当我们创建窗口的时候,就可以使用我们默认的显示样式了,R.style.MyStyle这个是指在style文件中设置的一个Dialog的样式,下面是常用的设置。

<style name="CustomDialog" parent="android:style/Theme.Dialog">

        <!-- 背景颜色及透明程度 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 是否有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否模糊 -->
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowFrame">@null</item>
    </style>

设置好样式之后,我们需要用我们自定义的布局,来设置显示的画面。

在Dialog里面,如果我们想使用自己的自定义布局,非常简单,我们只要重写onCreate方法即可,就像是我们在写一个Activity的布局一样,在onCreate里面,我们可以使用

setContentView(R.layout.dialog);来设置我们要填充的布局,然后对布局里面控件的事件绑定也都可以进行。

在设置好这些东西之后,我们就可以使用new MyDialog(context).show()来显示我们自定义的Dialog了。

下面是一个用来选择照片或者是拍照来获取照片的自定义Dialog的范例,大家可以参考

/**
 * 为符合软件整体风格而自定义的选择照片来源dialog
 *
 * @author ZhaoKaiQiang
 *
 *         Time:2014年3月12日
 */
public class MyCameraDialog extends Dialog {

	private TextView tv_my_camera_take_photo;
	private TextView tv_my_camera_from_album;
	private Context mContext;
	private static int mTheme = R.style.MyDialog;

	/**
	 * 自定义Dialog
	 *
	 * @param context
	 *            上下文
	 * @param activity
	 *            Dialog所在的Activity,用于点击“确定”按钮后finish所在的Activity
	 * @param title
	 *            文本内容
	 * @param btnString
	 *            按钮上的文字
	 * @param theme
	 *            样式
	 */
	public MyCameraDialog(Context context, int theme) {
		super(context, theme);
		this.mContext = context;
	}

	public MyCameraDialog(Context context) {
		super(context, mTheme);
		this.mContext = context;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dialog_select_photo);
		tv_my_camera_take_photo = (TextView) findViewById(R.id.tv_my_camera_take_photo);
		tv_my_camera_from_album = (TextView) findViewById(R.id.tv_my_camera_from_album);

		tv_my_camera_take_photo
				.setOnClickListener(new android.view.View.OnClickListener() {

					@Override
					public void onClick(View v) {
						MyCameraDialog.this.dismiss();
						//拍照选择
						Intent intent = new Intent(
								"android.media.action.IMAGE_CAPTURE");
						((Activity) mContext).startActivityForResult(intent, 0);

					}
				});

		tv_my_camera_from_album
				.setOnClickListener(new android.view.View.OnClickListener() {

					@Override
					public void onClick(View v) {
						//从相册选择
						MyCameraDialog.this.dismiss();
						Intent intent = new Intent(
								Intent.ACTION_PICK,
								android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
						((Activity) mContext).startActivityForResult(intent, 1);
					}
				});

	}

}
时间: 2024-12-29 13:13:58

关于自定义Dialog的那些事的相关文章

自定义控件(二)自定义Dialog

本节要实现:自定义一个Dialog 结果如下: 步 骤 1.配置register_dialog.xml: 下面是一个自定义的dialog. 功能是:点击dialog所依附的activity上的"注册"按钮,弹出此对话框. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/r

android 如何让自定义dialog的宽度充满整个屏幕?

============问题描述============ android 如何让自定义dialog的宽度跟屏幕的宽度一样.求大神们指教下.. ============解决方案1============ 在你dialog.show();后面加上 WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParam

去除安卓自定义Dialog黑色背景,设置无边框,透明

我们在自定义Dialog的时候,往往会希望除去安卓系统定义背景和标题,以便于更好的显示我们自己想要的效果. 其实我们只需要注意几个地方就行了. 1.在Style文件的中定义Dialog的主题 <style name="MyDialog"> <item name="android:windowFrame">@null</item> <item name="android:windowBackground"&

自定义Dialog

Android自带的dialog往往不能够满足我们设计的要求,所以有的时候需要自己自定义Dialog. 例如,以下介绍如下的自定义Dialog: 思路: 1.自定义一个Dialog的Style: 2.编写自定义的Dialog类,继承自Dialog: 3.使用自定义的Dialog: 具体实现的步骤: 1.定义Style: <style name="CustomDialog" parent="android:style/Theme.Dialog"> <

非自定义和自定义Dialog的介绍!!!

一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在Android中也不例外,对话框对于一些提示重要信息,或者一些需要用户额外交互的一些内容很有帮 助.本篇博客就讲解一下Android下对话框的使用,在本篇博客中,将了解到对话框的一些常规属性的设置,以及各式的对话框的使用,并都会提供小 Demo来展示所有的效果. Dialog Dialog,对话框,

Android创建自定义dialog方法详解-样式去掉阴影效果

在自定义组件时,从已有组件源码中会很大收获.就拿progressDialog来说     间接父类是dialog,想了解dialog继承结构可以去百度,或者    从构造器来说ProgressDialog(Context context, int theme)很明显需要个样式主题文件,我们可以在value文件下自定义一个样式文件.   从外观上需要个动态效果控件和文本框两个属性    ProgressBar mProgress;   TextView mMessageView源码中onCreat

android自定义Dialog

效果图: 修改系统默认的Dialog. 1,修改样式,在style.xml中添加一下代码 <style name="DialogTheme" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="androi

[Android]关于对话框dialog的一些事

7种形式的Android Dialog使用举例 http://www.oschina.net/question/54100_32486 [Android]关于对话框dialog的一些事,布布扣,bubuko.com

Android开发之自定义Dialog二次打开报错问题解决

之前自定义了一个AlertDialog对话框,第一次点击时正常,但第二次调用时会出现错误:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 关于这个错误纠结了我好久,在网上百度了也不少,但感觉解决效果都达不到自己想要的效果.网上的解释说是一个子视图指定了多个父视图.由此可以推断出,在第二