显示progressdialog,不带文字Android

时间:2013-06-07 09:12:09

标签: android progressdialog

Android 2.3.3

我有一个progressdialog显示,正在加载..作为文本。这是progressdialog的代码。

progressDialog = new ProgressDialog(mContext);      
            progressDialog.setIndeterminate(true);
            progressDialog.setMessage("Loading...");
            progressDialog.show();

如果我删除了行progressDialog.setMessage("Loading...");,我会得到左边的progressdialog和右边的一个空框,它占据了父级的宽度。

我想只显示progressdialog,在中心对齐。请参考下面的图片。

这就是我的......

enter image description here

这就是我想要的......

enter image description here

有人可以帮我这个吗?

13 个答案:

答案 0 :(得分:72)

试试这个1.创建一个这样的方法:

public static ProgressDialog createProgressDialog(Context context) {
    ProgressDialog dialog = new ProgressDialog(context);
    try {
        dialog.show();
    } catch (BadTokenException e) {

    }
    dialog.setCancelable(false);
    dialog.getWindow()
        .setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialog.setContentView(R.layout.progressdialog);
    // dialog.setMessage(Message);
    return dialog;
}

// Xml布局:

<?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:layout_gravity="center"
    android:background="@android:color/transparent" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

并在任何地方调用此方法:

if (progressDialog == null) {
    progressDialog = Utils.createProgressDialog(Login.this);
    progressDialog.show();
} else {
    progressDialog.show();
}

答案 1 :(得分:23)

如果您碰巧遇到错误:“requestFeature() must be called before adding content”,解决方法是在致电progressDialog.show()之前致电progressDialog.setContentView(R.layout.progressdialog)

答案 2 :(得分:7)

您可以在style.xml中添加以下样式

<style name="progress_bar_style">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

在color.xml文件中添加任何颜色。

答案 3 :(得分:6)

使用强调颜色(如果有的话)在材料设计上工作并且看起来很好

努力使其在5.0+和更低的API版本上都能正常运行。解决方案是通过对话而不是进步来实现它。

布局文件夹中的

创建文件 aux_progress_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@android:color/transparent"
              android:gravity="center"
              android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@android:color/transparent"
        />

</LinearLayout>

在某处创建一个函数...让我们说 Utils.class

   public static Dialog LoadingSpinner(Context mContext){
        Dialog pd = new Dialog(mContext, android.R.style.Theme_Black);
        View view = LayoutInflater.from(mContext).inflate(R.layout.aux_progress_spinner, null);
        pd.requestWindowFeature(Window.FEATURE_NO_TITLE);
        pd.getWindow().setBackgroundDrawableResource(R.color.transparent);
        pd.setContentView(view);
        return pd;
    }

在您的片段/活动中:

 private Dialog progress_spinner;
 progress_spinner = Utils.LoadingSpinner(mContext);   

 //------ Where you want it ------
 progress_spinner.show();

 //------- Dismiss it --------
 progress_spinner.dismiss();

可选:添加一个简单的CountDownTimer来测试它的外观

        new CountDownTimer(1000,1000){

            @Override public void onTick(long millisUntilFinished) {

            }

            @Override public void onFinish() {
                progress.dismiss();
            }
        }.start();

答案 4 :(得分:5)

您可以使用:

Progress progress = new ProgressDialog(getActivity(), android.support.v4.app.DialogFragment.STYLE_NO_TITLE);

如有必要,请添加到Gradle依赖项

compile 'com.android.support:support-v4:22.2.0'

答案 5 :(得分:1)

答案 6 :(得分:1)

你可以使用:

progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

如果你不想要标题,你可以:

progressDialog.setTitle(null);

答案 7 :(得分:1)

MuraliGanesan的回答是正确的,但是我只使用Dialog而不是ProgressDialog来避免在添加内容之前必须调用“requestFeature()”异常

答案 8 :(得分:1)

你可以通过创建一个扩展Dialog类的类来实现这个目的:

我们说我创建了以下课程:

public class TransparentProgressDialog extends Dialog {

    public ImageView iv;

    public TransparentProgressDialog(Context context, int resourceIdOfImage) {
        super(context, R.style.TransparentProgressDialog);
        WindowManager.LayoutParams wlmp = getWindow().getAttributes();
        wlmp.gravity = Gravity.CENTER_HORIZONTAL;
        getWindow().setAttributes(wlmp);
        setTitle(null);
        setCancelable(false);
        setOnCancelListener(null);
        LinearLayout layout = new LinearLayout(context);
        layout.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        iv = new ImageView(context);
        iv.setImageResource(resourceIdOfImage);
        layout.addView(iv, params);
        addContentView(layout, params);
    }

    @Override
    public void show() {
        super.show();
        RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
        anim.setInterpolator(new LinearInterpolator());
        anim.setRepeatCount(Animation.INFINITE);
        anim.setDuration(3000);
        iv.setAnimation(anim);
        iv.startAnimation(anim);
    }
}

TransparentProgressDialog放在style.xml中:

        @空值         @android:彩色/透明         真正         @空值         @空值         @android:款式/ Animation.Dialog         stateUnspecified | adjustPan         真正         @android:彩色/透明     

现在你可以放置任何会传播的进展图像:

TransparentProgressDialog pDialog = new TransparentProgressDialog(mContext, R.drawable.progress);
pDialog.show();

那就是它。

答案 9 :(得分:0)

MonoDroid中的这项工作:

progressDialog.SetMessage((string)null);

在java中试试这个:

progressDialog.setMessage(null);

答案 10 :(得分:0)

ProgressDialog.show(this, null,"", true);

答案 11 :(得分:0)

根据MuraliGanesan的回答,我创建了progressDialog的子类。

public class LoadingDialog extends ProgressDialog {

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

    @Override
    public void show() {
        super.show();
        setCancelable(false);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        setContentView(R.layout.custom_progress_dialog);
    }
}

此外,您还必须在res / layout

中创建custom_progress_dialog.xml
<?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"
    android:layout_gravity="center">

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

你使用它就像这样简单:

LoadingDialog dialog = new LoadingDialog(this);
dialog.show();
:
:
dialog.dismiss();

答案 12 :(得分:0)

我所做的是..

private ProgressDialog progressDialog;

private void loadProgressDialog() {
    try {
        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage("Please Wait...");
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(false);
        progressDialog.setCanceledOnTouchOutside(false);
    } catch (Exception e) {
        e.printStackTrace();
    }
}


private void showProgressDialog() {
    if (progressDialog != null && !progressDialog.isShowing()) {
        progressDialog.show();
    }
}


private void hideProgressDialog() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}

Output