android l'art - Changer le fond de ProgressDialog




développement studio (3)

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.


Answers

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);
   }
}

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


MediaPlayer n'est pas une bonne option lorsque vous jouez de petits effets sonores, car l'utilisateur peut cliquer sur plusieurs boutons très bientôt et vous devrez créer un objet MP pour chacun d'entre eux, ce qui ne se produira pas de manière synchrone. C'est pourquoi vous n'entendez pas de sons à chaque clic. Optez pour la classe SoundPool, qui vous permet de garder en mémoire des sons plus petits et de les lire à tout moment, sans le moindre retard que vous pourriez ressentir dans un lecteur multimédia. http://developer.android.com/reference/android/media/SoundPool.html Voici un bon tutoriel: http://www.anddev.org/using_soundpool_instead_of_mediaplayer-t3115.html





android android-layout android-dialog