我为对话框窗口输入设置了自己的动画,但是在创建活动后第一次调用.show()时它不会触发。
在下面的gif中,你可以看到第一次动画是下拉,只有第二次它是我设置的向上滑动。
DialogFragment :
public class DateChooseDialog extends DialogFragment {
public DateChooseDialog() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.DialogFullScreen);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog_date_choose, container);
}
@Override
public void onResume() {
WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.gravity = Gravity.BOTTOM;
params.windowAnimations = R.style.DialogSlideAnimation;
getDialog().getWindow().setAttributes(params);
super.onResume();
}
}
动画:
<style name="DialogSlideAnimation" parent="Theme.AppCompat.Dialog">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
</style>
<!-- slide_up -->
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="100%"
/>
<!-- slide_down -->
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="100%"
/>
这是我显示对话框的方式:
DateChooseDialog dateChooseDialog = new DateChooseDialog();
dateChooseDialog.show(getFragmentManager(), "date_choose");
答案 0 :(得分:1)
问题在于键盘。它会调整整个窗口的大小,而键盘会随着向下滑动动画而消失,整个窗口会通过向下滑动自行调整大小。
请将此行添加到您的清单中。
<activity (Your current activity)
...
android:windowSoftInputMode="adjustPan">
</activity>
使用这些线条,您的键盘将覆盖窗口,它不会调整大小。 下一个挑战是检测键盘是否打开以在必要时延迟动画。
祝你好运