2010-11-12 33 views
4

J'ai un Android (développé sur A2.2) application avec le thème suivant défini:Comment définir le thème pour indéterministes ProgressBar dans ProgressDialog dans Android

<style name="ProgressBar"> parent="@android:style/Widget.ProgressBar"> 
    <item name="android:indeterminateDrawable">@drawable/progress_medium</item> 
</style> 
<style name="AlertDialog" parent="@android:style/AlertDialog"> 
    <item name="android:fullDark">@drawable/bgr_alert</item> 
</style> 
<style name="MyTheme" parent="@android:style/Theme.Light.NoTitleBar"> 
    <item name="android:alertDialogStyle">@style/AlertDialog</item> 
    <item name="android:progressBarStyle">@style/ProgressBar</item> 
</style> 

où 'progress_medium Drawable est mon habitude (bleu) progressbar et 'bgr_alert' est un fond personnalisé (blanc).

Quand je montre la boîte de dialogue (le thème de l'application est « MyTheme »)

@Override 
protected Dialog onCreateDialog(int id) { 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setCancelable(false); 
    progressDialog.setIndeterminate(true); 
    return progressDialog; 
} 

la boîte de dialogue qui apparaît contient arrière-plan personnalisé (blanc), mais la barre de progression indéterministe n'est pas visible.

D'autre part, si je mets le drawable de progression manuellement:

progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.progress_medium)); 

tout est parfait - arrière-plan personnalisé et drawable de progression personnalisée.

Un indice, pourquoi le progressBar drawable n'est pas implicitement défini par thème de thème?

Répondre

14

Ok, j'ai ma réponse. Le problème est que la mise en page de progress_dialog.xml Android contient un style explicite pour ProgressBar:

<ProgressBar android:id="@android:id/progress" 
    style="@android:style/Widget.ProgressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:max="10000" 
    android:layout_marginRight="12dip" /> 

Je dois donc soit faire le réglage manuel (comme décrit ci-dessus) ou faire de dialogue complètement personnalisé.

+0

Marquer votre réponse comme correcte! Merci, vous m'avez sauvé parfois chercher ce qui se passait. –

0

J'ai eu ce problème et j'ai vraiment eu du mal à trouver la solution.

Je pense que vous utilisez, dans la définition de MyTheme android: background:

<style name="MyTheme"> 
    <item name="android:background">@color/white_color</item> 
    ..... 
    <item name=".....">value</item> 
</style> 

J'ai fait la même erreur, nous devrions utiliser Android: windowBackground et lui donner une couleur ou un drawable. De cette façon, les dialogues ne seront pas affectés par votre arrière-plan de thème. Faites-moi savoir si cette solution fonctionne pour vous!