Android 自定义Dialog,以及失去焦点之后,Dialog消失的解决

原创 2015年07月10日 10:16:34

自己参照网上的大量自定义Dialog的方法,也写出了在项目中使用的自定义Dialog,下面是实现代码:

/**
 * 自定义进度条Dialog
 * @author Administrator
 *
 */
public class CustomProgressDialog extends Dialog {
	private static CustomProgressDialog mCustomProgressDialog = null;

	public CustomProgressDialog(Context context) {
		super(context);
	}

	public CustomProgressDialog(Context context, int theme) {
		super(context, theme);
	}

	public static CustomProgressDialog createDialog(Context context) {
		return createDialog(context, false);
	}

	public static CustomProgressDialog createDialog(Context context,
			boolean cancel) {
		mCustomProgressDialog = new CustomProgressDialog(context,
				R.style.CustomProgressDialog);
		mCustomProgressDialog.setContentView(R.layout.custom_progress_dialog);
		mCustomProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER;

		ImageView loadingProfress = (ImageView) mCustomProgressDialog
				.findViewById(R.id.loading_progress);
		Animation animation = AnimationUtils.loadAnimation(context,
				R.anim.loading_progress_animation);
		loadingProfress.setAnimation(animation);
		mCustomProgressDialog.setCancelable(cancel);// 是否可以用“返回键”取消
		return mCustomProgressDialog;
	}

	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		if (mCustomProgressDialog == null) {
			return;
		}
		if (!hasFocus) {
			dismiss();
		}
	}

}
这个是Dialog需要用到的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent" >

    <ImageView
        android:id="@+id/loading_progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/loading_icon_rotation" />

    <ImageView
        android:id="@+id/loading_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/loading_icon" />

</RelativeLayout>
还有进度条的动画效果:

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
	    android:duration="1600"
	    android:fromDegrees="0"
	    android:interpolator="@android:anim/linear_interpolator"
	    android:pivotX="50%"
	    android:pivotY="50%"
	    android:repeatCount="infinite"
	    android:repeatMode="restart"
	    android:startOffset="-1"
	    android:toDegrees="+360" />

</set>
上面,已经把自定义Dialog实现的全部代码粘贴出来了,但是在使用过程中,出现了一个bug,在下面会进行详细说明。。。

----------------------------------

但是,上面的实现,在实际的使用过程,出现了这么一个情况,当你将顶部的状态栏下拉时,Dialog会消失,这是一个什么情况咧?

嘻嘻,因为在代码中,我重写了这么一个方法

@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		if (mCustomProgressDialog == null) {
			return;
		}
		if (!hasFocus) {
			dismiss();
		}
	}
onWindowFocusChanged(boolean hasFocus) :当Dialog获取焦点,或者失去焦点时,这个方法都会被调用,也就是当前界面焦点发生改变时,这个方法就会运行
看一看看我重写的这个方法里面的实现,当失去焦点时,hasFocus == false , 会dismiss掉这个Dialog。
问题得到了解决,
因为重写了onWindowFocusChanged方法,里面的实现导致Dialog失去焦点后,dismiss掉。。。。我忘记了当时,为什么要重写这个方法了。。。
那么这个问题怎么解决,不用我说了吧。。。
//	@Override
//	public void onWindowFocusChanged(boolean hasFocus) {
//		if (mCustomProgressDialog == null) {
//			return;
//		}
//		if (!hasFocus) {
//			dismiss();
//		}
//	}
注释掉就行了。。。

行了,解释完毕。

代码天然无污染,可放心食用。。。。




android 自定义dialog并实现失去焦点(背景透明)的功能

前言:由于在项目中需要用到更新显示动画的需求,所以想到了dialog,自定义dialog不难,网上教程很多,但是在实现dialog背景透明的需求时,遇到了一点问题,网上的一些方法在我的机器上并没有实现...

Android自定义dialog并实现失去焦点,activity获取焦点的功能

前言:由于在项目中需要用到更新显示动画的需求,所以想到了dialog,自定义dialog不难,网上教程很多,但是在实现dialog背景透明的需求时,遇到了一点问题,网上的一些方法在我的机器上并没有实现...

onWindowFocusChanged触发简介

看看源码中对该方法的说明: Called when the current android.view.Window of the activity gains or loses focus. T...

安卓Dialog关闭空白区域及返回键点击响应

在Android开发中,常常需要调用对话框,但会遇到这样一种情况,在显示对话框的时候,点击对话框以外的屏幕其他区域,会关闭对话框,处理不当还可能引发如下异常。 本文主要针对对话框来说,我们不希...

Android的dialog控制焦点导致其后Activity不响应

一、修改方法 public MenuDialog(Context context, int theme) { super(context, theme); WindowManager.Layo...

自定义ProgressDialog进度条对话框的实现

Android SDK已经提供有进度条组件ProgressDialog组件,但用的时候我们会发现可能风格与我们应用的整体风格不太搭配,而且ProgressDialog的可定制性也不太强,这时就需要我们...
  • vrix
  • vrix
  • 2015年02月04日 15:29
  • 2023

Android进度条自定义——类似ProgressDialog效果的Dialog

方法如下: 1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景)。 如我要的效果: 2.定义loading_dialog.xml布局文件...
  • lalate
  • lalate
  • 2016年05月18日 16:02
  • 1075

Android项目中使用自定义进度加载Dialog

直接运行之后的效果即如上图一中所示! 但无法达到在项目中使用的便捷性,不可能每一个需要用到此Dialog的地方都需要在相应的xml文件中定义该ProgressBar的控件吧,如果开发中界面使用多层次...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android自定义ProgressDialog进度等待框

原文链接(建议跳转):http://www.jb51.net/article/77867.htm 今天我们来做一个请求网络时候的加载动画,如图: 1、要定义布局文件,该布局文件即是Dialog的布局...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义Dialog,以及失去焦点之后,Dialog消失的解决
举报原因:
原因补充:

(最多只允许输入30个字)