web-dev-qa-db-fra.com

Affichage des progrèsdialog sans texte Android

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 ...

enter image description here

C'est ce que je veux...

enter image description here

Quelqu'un peut il m'aider avec ça?

32
Vamsi Challa

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();
}
71
MuraliGanesan

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).

23
yoram givon

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.

7
chaitanya

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();
6
OWADVL

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'
5
Gabriel Pereira

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 

1
Danny Liao

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.

1
KishuDroid

Utilisez ProgressBar au lieu de ProgressDialog . http://developer.Android.com/reference/Android/widget/ProgressBar.html

1
Kunal S. Kushwah

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();
0
Chuy47

Ce travail pour moi dans MonoDroid:

progressDialog.SetMessage((string)null);

Essayez ceci en Java:

progressDialog.setMessage(null);
0
Ludwo
ProgressDialog.show(this, null,"", true);
0
Woona