前言
日常开发中,dialog是常见的功能,我们时常需要弹出来一些弹框提示用户
今天就定义了一个方便的dialog基类BaseSimpleDialogFragment,
支持快速地显示一个dialog
主要功能有:
initAnimation:设置入场和出场动画
getGravity:设置dialog显示位置(屏幕上,中,下)
getCanceledOnTouchOutside:点击空白处关闭
getWindowWidth
getWindowHeight
getPaddingLeft:动态设置宽高和间距
整体来说比较简单,也方便扩展
创建dialog的时候只需要实现BaseSimpleDialogFragment即可
比如这样:
class MyDialog: BaseSimpleDialogFragment() {
override val layoutId: Int = R.layout.dialog_my_show
companion object {
@JvmStatic
fun newInstance(): MyDialog {
val dialog = MyDialog()
dialog.arguments = Bundle().apply {
// putParcelableArrayList(DATA, data)
}
return dialog
}
}
override fun initData() {
// data = arguments?.getParcelableArrayList(DATA) ?: return
}
override fun initView(view: View) {
layoutView.findViewById<Button>(R.id.cancle).setOnClickListener {
dismissAllowingStateLoss()
}
}
}
展示的时候几行代码就可以了:
MyDialog.newInstance().apply {
//传递数据
}.show(supportFragmentManager)
源码
源码这边先贴出来:
abstract class BaseSimpleDialogFragment : DialogFragment() {
abstract val layoutId: Int
protected open fun initView(view: View) {
//sonar
}
protected open fun initData() {
//sonar
}
protected open fun initListener() {
//sonar
}
lateinit var layoutView: View
protected lateinit var mContext: Context
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initAnimation()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
layoutView = inflater.inflate(layoutId, container, false)
return layoutView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView(view)
initListener()
initData()
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState).apply {
window?.run {
decorView.setPadding(
getPaddingLeft(),
getPaddingTop(),
getPaddingRight(),
getPaddingBottom()
)
val wlp = attributes.apply {

文章介绍了如何创建一个基础的自定义DialogFragment,包括设置入场和出场动画、显示位置、宽高等,并提供了简单的使用示例。同时,文章讨论了在使用过程中可能出现的内存泄漏问题,分析了原因,并提出了三种解决方法:设置引用为null、使用局部变量或采用弱引用。最后,文章提到了几个可能遇到的坑,如背景色修改、输入法显示时的位置问题以及转场动画的处理。
最低0.47元/天 解锁文章
1513

被折叠的 条评论
为什么被折叠?



