设置动画,没有AlertDialog的框架

时间:2013-07-07 21:55:30

标签: android alertdialog

我现在几个小时都在苦苦挣扎,对不起,如果这是一个愚蠢的问题。

我想用动画打开AlertDialog(调暗背景)。 对话框视图是WebView。我试过两种方法:

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?

有人可以指导我如何正确地做到这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是我的Custom Animated Alertdialog

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.MyDialogAnimationTheme);
    builder.setCancelable(true);
    LayoutInflater layoutInflater = getActivity().getLayoutInflater();
    View view = layoutInflater.inflate(R.layout.alert_can_continue,null);
    relativeLayout = (RelativeLayout) view.findViewById(R.id.call_layout_holder);
    relativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


        }
    });
    positive = (TextView) view.findViewById(R.id.tv_positive);
    positive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
    negative = (TextView) view.findViewById(R.id.tv_negative);
    negative.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
    builder.setView(view);
    AlertDialog alertDialog = builder.create();
    alertDialog.show();

这是styles.xml

 <style name="MyDialogAnimationTheme" parent="Base.Theme.AppCompat.Dialog.Alert">
    <item name="android:windowAnimationStyle">@style/MyDialogAnimation.Window</item>
    </style>
<style name="MyDialogAnimation.Window" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/anim_in</item>
        <item name="android:windowExitAnimation">@anim/anim_out</item>
    </style>

答案 1 :(得分: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);
}

如果我反转最后两行,则在更改方向时对话框会崩溃,因为:How to handle screen orientation change when progress dialog and background thread active?

然而,对话框在打开时会略微闪烁。我不明白为什么。