В нашем проекте мы используем 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")
}
}