Управление анимацией входа / выхода в DialogFragment - PullRequest
0 голосов
/ 02 октября 2018

В нашем проекте мы используем DialogFragment, чтобы показать дополнительную информацию в окне типа Bottom Sheet.Чтобы показать и закрыть этот диалог с анимацией, мы используем (windowEnterAnimation/windowExitAnimation) анимацию, установленную в стилях.

Проблема в том, что когда я нажимаю на кнопку в этом диалоговом окне и открываю новое действие, это диалоговое окно закрывается с анимацией, когда я закрываю это действие, это диалоговое окно вновь появляется с анимацией.Могу ли я отключить анимацию для этого диалога, когда открываю и закрываю над ним Activity (что-то вроде overridePendingAnimations в Activities).

styles.xml

<style name="BottomDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowBackground">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.5</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowMinWidthMajor">100%</item>
        <item name="android:windowMinWidthMinor">100%</item>
        <item name="android:windowSoftInputMode">adjustResize|stateHidden</item>
        <item name="android:windowAnimationStyle">@style/BottomDialogAnimations</item>
    </style>

    <style name="BottomDialogAnimations" parent="@android:style/Animation.Activity">
        <item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
        <item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
    </style>

InfoFragment.kt

class InfoFragment : DialogFragment() {

    private var mDialog: Dialog? = null

    private var viewItem: ViewItem? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewItem?.let {
            viewModel = ViewModelProviders.of(this).get(InfoViewModel::class.java)
            viewModel.init(it)
        } ?: kotlin.run { dismiss() }
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = activity?.let { AlertDialog.Builder(it, R.style.BottomDialog) }

        val rootView = View.inflate(context, R.layout.fragment_bottom_sheet_info, null) as ViewGroup
        builder?.setView(rootView)

        mDialog = builder?.create()
        mDialog?.window?.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
        mDialog?.window?.setGravity(Gravity.BOTTOM)

viewModel.showDetailsLiveEvent.observe(this, Observer { itemId ->
            itemId?.let {
                activity?.let { activity ->
                    startActivity(Intent(context, NewActivity::class.java))
                }
        })

        return mDialog as Dialog
    }

companion object {
        fun show(activity: FragmentActivity, item: ViewItem) {
            val fragment = InfoFragment()
            fragment.viewItem = item
            fragment.show(activity.supportFragmentManager, "receive_fragment")
        }
    }
...