Android 2.3.3
J'ai un progressdialog qui montre, Chargement .. sous forme de texte. Voici le code pour le progrèsdialog.
progressDialog = new ProgressDialog(mContext);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Loading...");
progressDialog.show();
Si je supprime la ligne progressDialog.setMessage("Loading...");
, j'obtiens un dialogue de progression à gauche et une zone vide à droite qui occupe la largeur du parent.
Je souhaite afficher uniquement le journal de progression, aligné au centre. S'il vous plaît se référer aux images ci-dessous ..
C'est ce que j'ai ...
C'est ce que je veux...
Quelqu'un peut il m'aider avec ça?
Essayez ceci 1.créez une méthode comme ceci:
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;
}
// Mise en page 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>
et appelez cette méthode où vous voulez:
if (progressDialog == null) {
progressDialog = Utils.createProgressDialog(Login.this);
progressDialog.show();
} else {
progressDialog.show();
}
Si vous obtenez le error : "requestFeature() must be called before adding content
", la solution consiste à appeler progressDialog.show()
AVANT d'appeler progressDialog.setContentView(R.layout.progressdialog)
.
vous pouvez ajouter du style ci-dessous dans votre 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>
où vous ajoutez une couleur dans le fichier color.xml.
Travailler et bien paraître sur la conception matérielle avec une couleur d'accentuation (si vous en avez)
J'ai eu beaucoup de mal à faire en sorte que cela fonctionne avec les versions 5.0+ et inférieures de l'API. Et la solution est de le faire avec un dialogue au lieu d'un progrès.
dans le dossier de présentation créer un fichier 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>
Créez une fonction quelque part ... disons 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;
}
Dans votre appel de fragment/activité:
private Dialog progress_spinner;
progress_spinner = Utils.LoadingSpinner(mContext);
//------ Where you want it ------
progress_spinner.show();
//------- Dismiss it --------
progress_spinner.dismiss();
Facultatif: ajouter un compte à rebours simple pour tester son apparence
new CountDownTimer(1000,1000){
@Override public void onTick(long millisUntilFinished) {
}
@Override public void onFinish() {
progress.dismiss();
}
}.start();
Vous pouvez utiliser:
Progress progress = new ProgressDialog(getActivity(), Android.support.v4.app.DialogFragment.STYLE_NO_TITLE);
Si nécessaire, ajouter aux dépendances Gradle
compile 'com.Android.support:support-v4:22.2.0'
La réponse de MuraliGanesan est correcte, mais j'utilise uniquement Dialog, pas ProgressDialog pour éviter "requestFeature () doit être appelé avant d'ajouter du contenu" exception
Vous pouvez le faire en créant simplement une classe qui étend la classe Dialog:
Disons que j'ai créé en dessous de la classe:
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);
}
}
Mettez TransparentProgressDialog
dans style.xml:
@nul @Android: couleur/transparent vrai @nul @nul @Android: style/Animation.Dialog stateUnspecified | adjustPan vrai @Android: couleur/transparent
Maintenant vous pouvez mettre n'importe quelle image de progrès qui circulera:
TransparentProgressDialog pDialog = new TransparentProgressDialog(mContext, R.drawable.progress);
pDialog.show();
C'est tout.
Utilisez ProgressBar au lieu de ProgressDialog . http://developer.Android.com/reference/Android/widget/ProgressBar.html
Sur la base de la réponse MuraliGanesan, j'ai créé une sous-classe de 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);
}
}
Aussi, vous devez créer le fichier custom_progress_dialog.xml dans 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>
Et vous l'utilisez aussi facilement que cela:
LoadingDialog dialog = new LoadingDialog(this);
dialog.show();
:
:
dialog.dismiss();
Ce travail pour moi dans MonoDroid:
progressDialog.SetMessage((string)null);
Essayez ceci en Java:
progressDialog.setMessage(null);
ProgressDialog.show(this, null,"", true);