显示没有文本Android的进度对话框
Posted
技术标签:
【中文标题】显示没有文本Android的进度对话框【英文标题】:Display progressdialog without text 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 。请参考下面的图片..
这就是我所拥有的......
这就是我想要的……
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案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_
android:layout_
android:layout_gravity="center"
android:background="@android:color/transparent" >
<ProgressBar
android:id="@+id/progressBar1"
android:layout_
android:layout_
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_
android:layout_
android:background="@android:color/transparent"
android:gravity="center"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
android:layout_
android:layout_
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");或其他您可以检查由***.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】:使用 ProgressBar 代替 ProgressDialog。 http://developer.android.com/reference/android/widget/ProgressBar.html
【讨论】:
在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_
android:layout_
android:background="@android:color/transparent"
android:layout_gravity="center">
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_
android:layout_
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
【讨论】:
以上是关于显示没有文本Android的进度对话框的主要内容,如果未能解决你的问题,请参考以下文章