Android 点击设置菜单条目,基于 DialogFragment 实现弹窗

更新日期: 2023-10-24 阅读次数: 710 字数: 431 分类: Android

DialogFragment 在 android 3.0 时被引入。是一种特殊的 Fragment,用于在 Activity 的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。在 DialogFragment 产生之前,创建对话框:一般采用 AlertDialog 和 Dialog。注:官方不推荐直接使用 Dialog 创建对话框。使用 DialogFragment 来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和 Fragment 有着基本一致的声明周期。且 DialogFragment 也允许开发者把 Dialog 作为内嵌的组件进行重用,类似 Fragment(可以在大屏幕和小屏幕显示出不同的效果)。

Deprecated?

This feature is added on API Level 11 and Deprecated on API Level 28

注意并不是 DialogFragment 被废弃,只是库的需要使用兼容性的 androidx 库。

import androidx.fragment.app.DialogFragment

替换掉

android.app.DialogFragment

DialogFragment 布局文件

res layout 中右键点击新建一个 layout 文件,例如:

dialog_fragment_about.xml

新建一个 DialogFragment 子类

import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.sunzhongwei.tool.R

class AboutDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // 创建自定义的对话框布局
        val inflater = requireActivity().layoutInflater
        val view = inflater.inflate(R.layout.dialog_fragment_about, null)

        // 创建对话框并设置自定义布局
        val dialog = Dialog(requireContext())
        dialog.setContentView(view)

        // 在此可对自定义布局中的视图进行操作和监听事件

        return dialog
    }
}

展示 DialogFragment

val dialogFragment = AboutDialogFragment()
dialogFragment.show(requireFragmentManager(), "dialog_fragment_tag")

但是会报警告:

'requireFragmentManager(): FragmentManager' is deprecated. Deprecated in Java

将 requireFragmentManager() 替换成 childFragmentManager,即

val dialogFragment = AboutDialogFragment()
dialogFragment.show(childFragmentManager, "dialog_fragment_tag")

填充内容

在里面定义一个 LinerLayout 即可。会自动居中。

感慨

写客户端真是浪费青春啊,调 DialogFragment 一个圆角调了一个小时,还没头绪。

参考

https://www.geeksforgeeks.org/dialogfragment-in-android/

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式