使用自定义的ProgressDialog Android

19

我在应用程序中使用自定义 ProgressDialog,我已经成功自定义,但我也希望删除 progressDialog 的上边框或窗口。 在 styles.xml 中,我将 customDialog 定义为:

<style name="AppTheme" parent="android:Theme.Light" />

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:background">#7BC047</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:windowBackground">@null</item>
     <item name="android:windowFrame">@null</item>
</style>

为了移除父窗口,我将 windowBackgroundwindowFrame 设置为 null,但是对我没有起作用。当前,我的自定义进度对话框的外观如下所示:enter image description here

我正在使用以下代码来设置 progressDialog 的样式。

 private void showProgressDialog() {
    progressDialog = new ProgressDialog(this,R.style.CustomDialog);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMessage("Logging in. Please wait.");
    progressDialog.show();
}

所以,帮我解决这个问题,任何帮助将不胜感激。


请查看这个答案 - Stan
8个回答

28
这个答案并没有解决问题,但是当搜索如何实现自定义进度对话框时,这是唯一指向SO的链接。 话虽如此,我在这个链接上找到了一个很酷且易于使用的自定义进度对话框,由某个Maksym Dybarskyi创建。 所有功劳归于创作者,而不是我。我只是分享。 你需要做的就是将以下内容添加到你的依赖项:
dependencies {
...
   compile 'com.github.d-max:spots-dialog:0.4@aar'
}

然后是自定义样式:

<style name="Custom" parent="android:Theme.DeviceDefault.Dialog">
    <item name="DialogTitleAppearance">@android:style/TextAppearance.Medium</item>
    <item name="DialogTitleText">Please Wait</item>
    <item name="DialogSpotColor">@android:color/holo_orange_dark</item>
    <item name="DialogSpotCount">8</item>
</style>

最后,在您的代码中执行以下操作:

private AlertDialog progressDialog;
progressDialog = new SpotsDialog(mContext, R.style.Custom);

//Am using it in an AsyncTask. So in  my onPreExecute, I do this:
public void onPreExecute() {
  super.onPreExecute();
  progressDialog.show();
  ...
 }

//dismiss in onPostExecute
public void onPostExecute(){
   progressDialog.dismiss();
 } 

结果:

enter image description here

黄点从左到右移动,您可以在样式中更改点的数量。


1
使用这个库,有没有办法改变警告对话框的背景? - Guruprasad J Rao
1
是的。@GuruprasadRao,请查看下面的Khawar的答案。 - Bawa
2
在样式中添加以下内容:<item name="android:windowBackground">@color/transparent</item> - Bawa
请不要忘记将以下内容添加到Proguard中,否则在签名的APK中点将不会出现:-keep class dmax.dialog.** { *; } - Mohammed Fathi

17

我知道我回答得很晚,但无论如何都要回答:

Dialog dialog = new  Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_login);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

8

我将在我的应用程序中使用自定义ProgressDialog。为此,我们需要遵循以下步骤:

第一步 创建一个名为custom_progress.xml的xml布局文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="@dimen/dp_size_10"
    android:layout_height="match_parent">
<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:indeterminateTint="@color/colorPrimary"
    android:layout_centerInParent="true"/>
</RelativeLayout>

步骤2 为此自定义对话框创建一个Java文件。

package com.example.customeprogress;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;

public class CustomProgressDialogue extends Dialog {
    public CustomProgressDialogue(Context context) {
        super(context);

        WindowManager.LayoutParams wlmp = getWindow().getAttributes();

        wlmp.gravity = Gravity.CENTER_HORIZONTAL;
        getWindow().setAttributes(wlmp);
        setTitle(null);
        setCancelable(false);
        setOnCancelListener(null);
        View view = LayoutInflater.from(context).inflate(
                R.layout.custom_progress, null);
        setContentView(view);
    }
}

步骤三 在您的活动Java类中创建这个自定义类的对象并初始化 使用以下方法,将对象用于 show()dismiss()

CustomProgressDialogue object = new CustomProgressDialogue(this);

然后使用以下方法显示此对话框。

object.show(); 并使用以下方法关闭它 object.dismiss();

输出结果: 在这里查看输出结果


谢谢 @Deepak gupta - PhillipMwaniki
这正是我正在寻找的确切解决方案。它还有助于管理警报对话框的高度和宽度。谢谢。 - Deepak Rathore

2

请检查进度对话框构造函数中是否使用了活动名称。

 progressDialog = new ProgressDialog(Activity.this,R.style.CustomDialog);

1
将此添加到样式中。
<item name="android:background">@android:color/transparent</item>

<item name="android:windowBackground">@android:color/transparent</item>

2
您的回答似乎太过简略。请更加详细地描述您打算做什么。 - Athafoud

1
将以下内容添加到您的`styles.xml`中的`CustomDialog`中:
<item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>

而这个 style
 <style name="CustomAlertDialogStyle" >
    <item name="android:bottomBright">@android:color/transparent</item>
    <item name="android:bottomDark">@android:color/transparent</item>
    <item name="android:bottomMedium">@android:color/transparent</item>
    <item name="android:centerBright">@android:color/transparent</item>
    <item name="android:centerDark">@android:color/transparent</item>
    <item name="android:centerMedium">@android:color/transparent</item>
    <item name="android:fullBright">@android:color/transparent</item>
    <item name="android:fullDark">@android:color/transparent</item>
    <item name="android:topBright">@android:color/transparent</item>
    <item name="android:topDark">@android:color/transparent</item>
</style>

1
<style name="CustomDialog" parent="Theme.AppCompat.Light.Dialog">
   <item name="android:background">#7BC047</item>
   <item name="android:textColor">#FFFFFF</item>
   <item name="android:windowBackground">@color/colorTransparent</item>
</style>

这对我来说起到了作用。

0

这可能不是上面问题的合适答案。但这很有趣,我想在这里添加一下。

(我的声望还不够,无法评论)

请查看链接

原作者使用gif替代默认的加载对话框,我认为如果有改进,那么这将是一个不错的替代品。


请将链接内容添加到您的答案中。 - mastisa
我已经添加了它。其他人看不见吗? :| [链接](https://medium.com/mindorks/stop-implementing-the-default-loading-dialog-in-you-android-apps-43c3a85036d6) - RochaaP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接