package com.xscm.moduleutil.base import android.app.Dialog import android.content.DialogInterface import android.graphics.Color import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.Window import android.view.WindowManager import androidx.core.view.WindowCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.DialogFragment import androidx.viewbinding.ViewBinding import com.voice.lib_base.ext.inflateBindingWithGeneric import com.xscm.moduleutil.R open class BaseBottomFragmentDialog(private val resourceID: Int) : DialogFragment() { var mDatabind: B? = null val mBinding: B get() = mDatabind!! override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = Dialog(requireActivity(), R.style.myChooseDialog) mDatabind = DataBindingUtil.inflate(LayoutInflater.from(requireContext()), resourceID, null, false) as B dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog.setContentView(mBinding!!.root) val window = dialog.window val params = window!!.attributes params.width = WindowManager.LayoutParams.MATCH_PARENT params.height = WindowManager.LayoutParams.WRAP_CONTENT params.gravity = Gravity.BOTTOM window.attributes = params dialog.setCanceledOnTouchOutside(true) return dialog } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { mDatabind = inflateBindingWithGeneric(inflater, container, false) // return if (mBinding != null) mBinding!!.root else mDatabind?.root return mBinding?.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) WindowCompat.setDecorFitsSystemWindows(requireDialog().window!!, false) requireDialog().setOnShowListener { dialog: DialogInterface? -> (view.parent as ViewGroup).setBackgroundColor( Color.TRANSPARENT ) } } override fun onDestroyView() { super.onDestroyView() mDatabind = null } fun setBundleArgs(bundleArgs: Bundle?): BaseBottomFragmentDialog { arguments = bundleArgs return this } }