我已经纠结了好几个小时了,如果这是一个愚蠢的问题,很抱歉。
我想打开一个带有动画的AlertDialog(调暗背景)。对话框视图是WebView。我尝试了两种方法:
1) 使用xml风格的动画对话框:
<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?
有人能指导我如何正确地做这件事吗?
谢谢!!
这是我的自定义动画警报对话框
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>
经过大量的工作,我找到了如何做到这一点。这样,我就不会触及默认的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);
}
如果我反转最后两行,对话框在更改方向时会崩溃,原因是:当进度对话框和背景线程处于活动状态时,如何处理屏幕方向的更改?
尽管如此,对话框在打开时仍会轻微"闪烁"。我不知道为什么。