Показать прогрессдиалог без текста Android
Android 2.3.3
У меня есть progressdialog, который показывает, Загрузка.. как текст. Вот код для progressdialog.
progressDialog = new ProgressDialog(mContext);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Loading...");
progressDialog.show();
Если я удаляю строку progressDialog.setMessage("Loading...");
, я получаю прогрессдиалог слева и пустой прямоугольник справа, который занимает ширину родителя.
Я хочу отобразить только progressdialog, выровненный по центру. Пожалуйста, обратитесь к изображениям ниже..
Это то, что у меня есть...
![enter image description here]()
Это то, что я хочу...
![enter image description here]()
Может кто-нибудь мне помочь?
Ответы
Ответ 1
Попробуйте это 1.Создайте метод, подобный этому:
public static ProgressDialog createProgressDialog(Context mContext) {
ProgressDialog dialog = new ProgressDialog(mContext);
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 Layout:
<?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();
}
Ответ 2
Если вам пришла ошибка: "requestFeature() must be called before adding content
", решение должно вызвать progressDialog.show()
ДО того, как вы вызываете progressDialog.setContentView(R.layout.progressdialog)
.
Ответ 3
вы можете добавить стиль ниже в 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.
Ответ 4
Вы можете использовать:
Progress progress = new ProgressDialog(getActivity(), android.support.v4.app.DialogFragment.STYLE_NO_TITLE);
При необходимости добавьте в Gradle зависимости
compile 'com.android.support:support-v4:22.2.0'
Ответ 5
Работайте и смотрите хорошо на дизайн материала с акцентом цвета (если у вас есть)
Попытка усложнить работу как с версией версии 5.0, так и ниже. И решение состоит в том, чтобы сделать это с диалогом вместо прогресса.
в папке макета создайте файл 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();
Ответ 6
Используйте ProgressBar вместо ProgressDialog.
http://developer.android.com/reference/android/widget/ProgressBar.html
Ответ 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: стиль /Animation.Dialog stateUnspecified | adjustPan правда @android: Цвет/прозрачный
Теперь вы можете поместить любое изображение прогресса, которое будет распространяться:
TransparentProgressDialog pDialog = new TransparentProgressDialog(mContext, R.drawable.progress);
pDialog.show();
Что это.
Ответ 10
Эта работа для меня в MonoDroid:
progressDialog.SetMessage((string)null);
Попробуйте это в java:
progressDialog.setMessage(null);
Ответ 11
ProgressDialog.show(это, null, "", true);
Ответ 12
На основе ответа 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);
}
}
Также вам нужно создать custom_progress_dialog.xml в res/layout
<?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();