美好的一天。我遇到问题,当对话框动画从片段调用对话框时停止工作。 首先,我尝试使用自定义样式的DialogFragment:
public static class QRDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
dialog.setCancelable(true);
ImageView im = new ImageView(getActivity());
im.setImageResource(R.drawable.qr_code_placeholder);
im.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
im.setClickable(true);
im.setScaleType(ImageView.ScaleType.FIT_XY);
im.setAdjustViewBounds(true);
im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
dialog.setView(im);
return dialog.create();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getDialog().getWindow().getAttributes().windowAnimations = R.style.XSlideAnimation;
}
}
那些XSlideAnimation是简单的动画风格:
<style name="XSlideAnimation" >
<item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
它没有用。
然后我尝试为片段事务设置自定义动画:
FragmentTransaction tr = getFragmentManager().beginTransaction();
tr.setCustomAnimations(R.anim.in, R.anim.out);
new QRDialog().show(tr, "dialog");
in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="50%"
android:toYDelta="0"
android:duration="500"
/>
</set>
out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="50%"
android:duration="500"
/>
</set>
也没有成功。
然后我尝试获取新的Dialog实例并为其设置动画:
final Dialog dialog = new Dialog(getActivity());
ImageView im = new ImageView(getActivity());
im.setImageResource(R.drawable.qr_code_placeholder);
im.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
im.setClickable(true);
im.setScaleType(ImageView.ScaleType.FIT_XY);
im.setAdjustViewBounds(true);
dialog.setContentView(im);
im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.getWindow().getAttributes().windowAnimations = R.style.XSlideAnimation;
dialog.setCancelable(true);
dialog.show();
只有当我从活动中调用对话框时,动画才能完美。当我在片段中放入完全相同的代码时,动画停止工作。第一种方法也来自活动,但不是片段。
如何在片段中创建对话框时能够获得动画效果吗?
UPD 16-102017: 到目前为止,我在这里看不到任何答案或评论,但是有人一度赞成这个问题。所以,只是为了更新 - 在我的情况下,它刚刚开始工作。我完全没有代码。动画刚刚出现,几天后在测试期间稳定了。