【问题标题】:Display progressdialog without text Android显示没有文本Android的进度对话框
【发布时间】:2013-06-03 13:01:08
【问题描述】:

Android 2.3.3

我有一个进度对话框,显示正在加载.. 作为文本。这是进度对话框的代码。

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

如果我删除progressDialog.setMessage("Loading..."); 行,我会得到左侧的进度对话框和右侧的占父宽度的空框。

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

这就是我所拥有的......

这就是我想要的……

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: android progressdialog


    【解决方案1】:

    试试这个 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();
    }
    

    【讨论】:

    • 我收到以下崩溃/错误:“在添加内容之前必须调用 requestFeature()”
    • 我尝试了所有提供的解决方案。这个是最好的。它显示了一个很好的干净进度微调器,没有框和文本。
    • 至少在 Lollipop 中,微调器确实为我显示了一个框,具有对话框的典型宽度和背景颜色。
    • Lollipop 的解决方案是在 setContentView 之前运行以下命令: dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    • @all ->> 在下面查看我的答案
    【解决方案2】:

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

    【讨论】:

    • 精湛的@Choletski
    【解决方案3】:

    在带有强调色的材料设计上表现出色(如果有的话)

    努力让它在 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】:

      您可以在 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 文件中添加任何颜色。

      【讨论】:

      • @VamsiChalla 您想要以编程方式编写 Java 代码的风格吗?或者你想如何在java代码中使用这种风格?
      • 我想用 java 代码以编程方式执行上述 xml 代码所做的任何事情。我想以编程方式设置进度对话框的样式。
      • 第一种使用对话框 dialog = new Dialog(mContext,"your stylename");或其他您可以检查由stackoverflow.com/questions/3142067/android-set-style-in-code中的代码设置的样式@
      • @BenH 您有什么要求?我们可以通过编程方式或样式设置
      • 我的要求和OP的一样。一个没有围绕它的框的微调器,并且居中。
      【解决方案5】:

      你可以使用:

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

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

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

      【讨论】:

      • 它使用您的方法显示一个正在进行的黑色方块对话框背景,尽管我将 setBackgroundDrawable 设置为透明的,知道吗?
      【解决方案6】:

      【讨论】:

      • 在xml中使用style="?android:attr/progressBarStyle"
      • 尝试以编程方式设置布局参数。不过我不确定。
      【解决方案7】:

      你可以使用:

      progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

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

      progressDialog.setTitle(null);
      

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          你可以通过创建一个扩展 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:style/Animation.Dialog stateUnspecified|adjustPan 真的 @android:颜色/透明

          现在你可以放任何将要流传的进度图片:

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

          就是这样。

          【讨论】:

          • 你能告诉我进度对话框的样式吗?请:D
          【解决方案10】:

          根据 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();
          

          【讨论】:

            【解决方案11】:

            在 MonoDroid 中为我工作:

            progressDialog.SetMessage((string)null);
            

            在java中试试这个:

            progressDialog.setMessage(null);
            

            【讨论】:

            • 这并不能解决问题;图标仍显示在左侧,对话框的其余部分为空白。
            【解决方案12】:
            ProgressDialog.show(this, null,"", true);
            

            【讨论】:

              【解决方案13】:

              我所做的是..

              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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-06-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多