DialogFragment在第一次显示时输入动画不会触发

时间:2016-05-21 20:55:56

标签: android animation android-fragments

我为对话框窗口输入设置了自己的动画,但是在创建活动后第一次调用.show()时它不会触发。

在下面的gif中,你可以看到第一次动画是下拉,只有第二次它是我设置的向上滑动。

enter image description here

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");

1 个答案:

答案 0 :(得分:1)

问题在于键盘。它会调整整个窗口的大小,而键盘会随着向下滑动动画而消失,整个窗口会通过向下滑动自行调整大小。

请将此行添加到您的清单中。

<activity (Your current activity)
   ...
  android:windowSoftInputMode="adjustPan"> 
</activity>

使用这些线条,您的键盘将覆盖窗口,它不会调整大小。 下一个挑战是检测键盘是否打开以在必要时延迟动画。

祝你好运