自定义progressDialog与Theme.AppCompat冲突

图片说明
图片说明
如上图所示,因为所在的activity新添加了tabLayout(android源生的)需要将activity:theme改为

 android:theme="@style/Theme.AppCompat

然后悲剧了dialog出现了一部分空白的地方 去掉theme以后就好了,但是tabLayout又不可以用了,求大神帮忙!!

4个回答

额,上面这是2张图啊

你这两张图不行啊!你的代码贴出来

zgy621101
紫风幻雪 回复zunjiu: 解决就好
大约 2 年之前 回复
zunjiu
zunjiu 谢谢大神,找到问题了,就是theme的问题,Theme.AppCompat这个theme下系统自带的ProgressDialog就是这么长,只能自定义了!!
大约 2 年之前 回复

最后自己做个总结:
progressDialog的构造:

  public ProgressDialog(Context context) {
        super(context);
        initFormats();
    }

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

第二个参数theme是自定义theme,如果使用一个参数的构造,使用的就是android源生的theme,
而源生theme则是由progressDialog所在的activity的theme决定的
在ProgressDialog的父类AlertDialog中(195行开始)有这样一个方法

     static int resolveDialogTheme(Context context, int themeResId) {
        if (themeResId == THEME_TRADITIONAL) {
            return R.style.Theme_Dialog_Alert;
        } else if (themeResId == THEME_HOLO_DARK) {
            return R.style.Theme_Holo_Dialog_Alert;
        } else if (themeResId == THEME_HOLO_LIGHT) {
            return R.style.Theme_Holo_Light_Dialog_Alert;
        } else if (themeResId == THEME_DEVICE_DEFAULT_DARK) {
            return R.style.Theme_DeviceDefault_Dialog_Alert;
        } else if (themeResId == THEME_DEVICE_DEFAULT_LIGHT) {
            return R.style.Theme_DeviceDefault_Light_Dialog_Alert;
        } else if (themeResId >= 0x01000000) {   // start of real resource IDs.
            return themeResId;
        } else {
            final TypedValue outValue = new TypedValue();
            context.getTheme().resolveAttribute(R.attr.alertDialogTheme, outValue, true);
            return outValue.resourceId;
        }
    }

从中可以看出,android会根据activity的主题来决定ProgressDialog的样式

我出现问题的原因:
项目是一个比较老的项目 在application中定义的项目theme是THEME_HOLO_LIGHT
而我因为要使用tabLayout修改了progressDialog所在activity的 android:theme="@style/Theme.AppCompat
导致出现了progressDialog有一段空白的情况
最终解决办法

  ProgressDialog progressDialog =new ProgressDialog(context,ProgressDialog.THEME_HOLO_LIGHT);

如果哪位大神有更好的解决办法,欢迎指教!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!