自己参照网上的大量自定义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;}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {if (mCustomProgressDialog == null) {return;}if (!hasFocus) {dismiss();}}}
这个是Dialog需要用到的布局文件:

<?xml version="1.0" encoding="utf-8"?>        
还有进度条的动画效果:

<?xml version="1.0" encoding="utf-8"?>    
上面,已经把自定义Dialog实现的全部代码粘贴出来了,但是在使用过程中,出现了一个bug,在下面会进行详细说明。。。

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

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

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

@Overridepublic 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();//}//}
注释掉就行了。。。

行了,解释完毕。

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




更多相关文章

  1. Android(安卓)面试--请描述一下Activity的生命周期?
  2. [Android]调用字符串资源的几种方法
  3. android通过web service调用查询手机归属地代码
  4. Android应用推送角标设置方法
  5. Android6.0 设置默认输入法
  6. Android(安卓)- BroadcastReceiver
  7. Android(安卓)BigNews 曾量更新
  8. Android使用Toast显示消息提示框
  9. 【Android】报错IOException: Read-only file system问题解决方

随机推荐

  1. [Android]googleMap的简单使用,地图定位,图
  2. Android(安卓)支持多屏幕机制
  3. Android中如何查看so崩溃的log
  4. Android(安卓)无线启动过程分析 无线启动
  5. Android(安卓)自定义标签 和 自定义组件
  6. Android(安卓)开发常用ADB命令集合
  7. 【Android】EditText的特殊属性介绍
  8. android Gallery实现加载网络图片
  9. Android(安卓)Studio 常用技巧
  10. Android(安卓)getText(int resId)和getSt