site - tuto android studio francais




Changer le fond de ProgressDialog (2)

Le commentaire d'Aleks G (ci-dessous la question) va dans la bonne direction. L'apparence de la boîte de dialogue est définie par un style distinct ( android:alertDialogStyle ). Mais on ne peut pas appliquer le style directement à un ProgressDialog . Comment puis-je obtenir ce fond jaune?

Etape 1 : Définissez un thème qui hérite de Theme.Dialog :

<style name="MyTheme" parent="@android:style/Theme.Dialog">
    <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>
    <item name="android:textColorPrimary">#000000</item>
</style>

Là, vous pouvez définir des choses comme la couleur d'arrière-plan pour la fenêtre entière (jaune dans la question), les couleurs de police, etc. Ce qui est vraiment important, c'est la définition d' android:alertDialogStyle . Ce style contrôle l'apparence de la zone noire dans la question.

Étape 2 : Définissez le CustomAlertDialogStyle :

<style name="CustomAlertDialogStyle">
    <item name="android:bottomBright">@color/yellow</item>
    <item name="android:bottomDark">@color/yellow</item>
    <item name="android:bottomMedium">@color/yellow</item>
    <item name="android:centerBright">@color/yellow</item>
    <item name="android:centerDark">@color/yellow</item>
    <item name="android:centerMedium">@color/yellow</item>
    <item name="android:fullBright">@color/yellow</item>
    <item name="android:fullDark">@color/yellow</item>
    <item name="android:topBright">@color/yellow</item>
    <item name="android:topDark">@color/yellow</item>
</style>

Cela définit la zone noire de la question en jaune.

Étape 3 : Appliquez MyTheme au ProgressDialog , pas à CustomAlertDialogStyle :

ProgressDialog dialog = new ProgressDialog(this, R.style.MyTheme);

Et voici le résultat:

La même procédure fonctionne avec AlertDialog (qui est la classe parente de ProgressDialog ).

J'essaie de changer le fond d'un ProgressDialog . J'ai cherché sur le net et trouvé diverses suggestions (comme Comment supprimer une bordure de Dialog? ), Mais je ne peux pas remplacer l'arrière-plan réel de ProgressDialog . Au lieu de cela, je reçois un autre arrière-plan (jaune) derrière la boîte de dialogue:

Mon style:

<style name="StyledDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/panel_background</item>
</style>

Le code qui lance ProgressDialog :

ProgressDialog dialog = new ProgressDialog(this, R.style.StyledDialog);
dialog.setTitle("The title");
dialog.setMessage("The message.");
dialog.show();

Le drawable est le même patch qui est inclus dans le SDK, je viens de changer en couleur. J'apprécierais grandement certains conseils que je fais mal.


Vous pouvez essayer mon gist . Il définit essentiellement un filtre de couleur sur dessinable.

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ProgressBar;

public class ColoredProgressBar extends ProgressBar {
   public ColoredProgressBar(Context context) {
      super(context);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs) {
      super(context, attrs);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
      if (!isInEditMode())
         init();
   }

   /**
    * Changes color.
    */
   private void init() {
      getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY);
   }
}




android-dialog