0

私は今、これに何時間も苦労しています。これがばかげた質問であれば申し訳ありません。

アニメーション付きの AlertDialog (背景を暗くする) を開きたい。ダイアログ ビューは WebView です。私は2つの方法を試しました:

1) xml スタイルの AnimatedDialog の場合:

<style name="AnimatedDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/AnimatedDialogAnimation</item>
</style>

コードを呼び出す

 builder = new AlertDialog.Builder(context, R.style.AnimatedDialog);

このアプローチの問題は、おそらくparent="@android:style/Theme.Dialog"問題が間違っているため、ダイアログに醜いフレームがあることですが、AlertDialog. だから私はこれを試しました:

2) を通じてWindowManager.LayoutParams:

    WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
    lp.windowAnimations = R.style.AnimatedDialog;
    dialog.getWindow().setAttributes(lp);

これに関する問題は、ダイアログがアニメーション化されていないことです (なぜ??)。

さらに、どちらの場合も、ダイアログが表示される前に短時間「点滅」します。つまり、「ビルド」されていることがわかります。おそらくWebViewのせいでしょうか?

誰かがこれを適切に行う方法を教えてもらえますか?

ありがとう!!

4

2 に答える 2

0

たくさんの作業の後、私はそれを行う方法を見つけました。このように、デフォルトの AlertDialog テーマには触れていません。

    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setIcon(R.drawable.ic_launcher).setView(myMsg);
    AlertDialog dialog = builder.create();

    WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
    lp.windowAnimations = R.style.AnimateDialog;

    if (fillscreen) {
        lp.height = LayoutParams.FILL_PARENT;
        lp.width = LayoutParams.FILL_PARENT;
    } else { 
        lp.height = LayoutParams.WRAP_CONTENT;
        lp.width = LayoutParams.WRAP_CONTENT;
    }
    if (fullscreenpref)
        lp.flags = android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN |
                   android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;

    dialog.show();
    dialog.getWindow().setAttributes(lp);
}

最後の 2 行を反転すると、方向を変更するときにダイアログがクラッシュします。これは、進行状況ダイアログとバックグラウンド スレッドがアクティブなときに画面の方向の変更を処理する方法ですか?

それでも、ダイアログが開いている間、ダイアログはわずかに「ちらつき」ます。理由がわかりません。

于 2013-07-08T00:06:29.117 に答える