28

の背景を変更しようとしていProgressDialogます。ネットを検索したところ、さまざまな提案が見つかりました (ダイアログから境界線を削除する方法など) が、実際の背景を置き換えることができませんProgressDialog。代わりに、ダイアログの背後に別の背景 (黄色) が表示されます。

スタイル付きダイアログ

私のスタイル:

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

を起動するコードProgressDialog:

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

drawable は SDK に含まれているものと同じ 9 パッチで、カラーに変更しただけです。私が間違っていることのヒントをいただければ幸いです。

4

2 に答える 2

69

Aleks G のコメント (質問の下) は正しい方向を示しています。ダイアログの外観は、別のスタイル ( android:alertDialogStyle) によって定義されます。しかし、スタイルを直接 に適用することはできませんProgressDialog。では、その黄色の背景を取得するにはどうすればよいでしょうか。

ステップ 1 : から継承するテーマを定義しTheme.Dialogます。

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

そこでは、ウィンドウ全体の背景色(問題では黄色)、フォントの色などを定義できます。本当に重要なのはandroid:alertDialogStyle. このスタイルは、問題の黒い領域の外観を制御します。

ステップ 2 : 以下を定義し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>

これにより、質問の黒い領域が黄色に設定されます。

ステップ 3 :ではなくMyThemeに適用:ProgressDialog CustomAlertDialogStyle

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

結果は次のとおりです。

スタイル付き ProgressDialog

同じ手順がAlertDialog( の親クラスであるProgressDialog) でも機能します。

于 2012-11-16T10:50:47.170 に答える