web-dev-qa-db-fra.com

Changer l'arrière-plan de ProgressDialog

J'essaie de changer l'arrière-plan d'un ProgressDialog. J'ai cherché sur le net et trouvé diverses suggestions (comme Comment supprimer la bordure de la boîte de dialogue? ), mais je ne peux pas remplacer l'arrière-plan réel du ProgressDialog. À la place, j'obtiens un autre arrière-plan (jaune) derrière la boîte de dialogue:

Styled Dialog

Mon style:

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

Le code qui lance le ProgressDialog:

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

Le dessinable est le même patch 9 qui est inclus dans le SDK, je viens de changer de couleur. J'apprécierais grandement quelques indices sur ce que je fais mal.

26
aha

Le commentaire d'Aleks G (sous la question) va dans le bon sens. 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. Maintenant, comment puis-je obtenir ce fond jaune?

Étape 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 de 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 sur jaune.

Étape: appliquez MyTheme à ProgressDialog, pasCustomAlertDialogStyle:

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

Et voici le résultat:

Styled ProgressDialog

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

63
aha