4

次のテーマが定義されたAndroid(A2.2で開発)アプリがあります。

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

ここで、「progress_medium」ドローアブルは私のカスタム(青)プログレスバーであり、「bgr_alert」はカスタム(白)背景です。

ダイアログを表示すると(アプリケーションのテーマは「MyTheme」です)

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

表示されるダイアログにはカスタム背景(白)が含まれていますが、不確定なプログレスバーは表示されません。

一方、プログレスドローアブルを手動で設定した場合:

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

すべてが完璧です-カスタムの背景とカスタムの進行状況を描画できます。

ヒント、progressBarドローアブルがテーマテーマによって暗黙的に設定されないのはなぜですか?

4

2 に答える 2

14

わかりました、答えがあります。問題は、Androidのprogress_dialog.xmlレイアウトに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" />

したがって、手動設定(上記のとおり)を実行するか、完全にカスタムダイアログを実行する必要があります。

于 2010-11-12T23:37:46.590 に答える
0

私はこの問題を抱えていて、解決策を見つけるのは本当に大変でした。

MyTheme android:backgroundの定義で使用していると思います。

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

同じ間違いをしました。android:windowBackgroundを使用して、色またはドローアブルを指定する必要があります。このようにして、ダイアログはテーマの背景の影響を受けません。

この解決策があなたのために働くかどうか私に知らせてください!

于 2011-08-05T10:04:28.077 に答える