Android 2.3.3
我有一个progressdialog显示,正在加载..作为文本。这是progressdialog的代码。
progressDialog = new ProgressDialog(mContext);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Loading...");
progressDialog.show();
如果我删除了行progressDialog.setMessage("Loading...");
,我会得到左边的progressdialog和右边的一个空框,它占据了父级的宽度。
我想只显示progressdialog,在中心对齐。请参考下面的图片。
这就是我的......
这就是我想要的......
有人可以帮我这个吗?
答案 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)
使用ProgressBar而不是ProgressDialog。 http://developer.android.com/reference/android/widget/ProgressBar.html
答案 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();
}
}