首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将一个DialogFragment放在另一个DialogFragment的上方/下方?

将一个 DialogFragment 放在另一个 DialogFragment 的上方或下方,可以通过设置 DialogFragment 的样式和位置来实现。下面是一个示例的解决方案:

  1. 首先,定义一个父 DialogFragment(ParentDialogFragment)和一个子 DialogFragment(ChildDialogFragment)。
  2. 在 ParentDialogFragment 的布局文件中,添加一个 FrameLayout 作为容器来放置 ChildDialogFragment。
  3. 在 ParentDialogFragment 的代码中,使用 getChildFragmentManager() 获取 Child DialogFragment 的 FragmentManager,并在合适的时机通过 FragmentTransaction 添加 ChildDialogFragment 到 FrameLayout 容器中。如下所示:
代码语言:txt
复制
ChildDialogFragment childDialogFragment = new ChildDialogFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.container, childDialogFragment).commit();
  1. 设置 ChildDialogFragment 的样式和位置。可以在 ChildDialogFragment 的 onCreate 方法中调用 setStyle() 方法来设置样式,如下所示:
代码语言:txt
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.ChildDialogFragmentStyle);
}

在 res/values/styles.xml 文件中定义 ChildDialogFragment 的样式 ChildDialogFragmentStyle,可以自定义样式的背景、边距等属性。

  1. 最后,根据需要,可以在 ParentDialogFragment 中通过调整 ChildDialogFragment 的位置来放置在上方或下方。可以通过设置 ChildDialogFragment 的 Dialog 对象的 Window 参数来实现,如下所示:
代码语言:txt
复制
@Override
public void onResume() {
    super.onResume();
    
    Dialog dialog = getDialog();
    Window window = dialog.getWindow();
    
    WindowManager.LayoutParams params = window.getAttributes();
    params.gravity = Gravity.BOTTOM;  // 改变 ChildDialogFragment 的位置
    window.setAttributes(params);
}

通过修改 params.gravity 的值,可以将 ChildDialogFragment 放置在上方(Gravity.TOP)或下方(Gravity.BOTTOM)。

至此,你就可以将一个 DialogFragment 放在另一个 DialogFragment 的上方或下方了。根据实际需求,可以调整样式、位置和布局来满足具体的设计要求。

参考链接:

  • DialogFragment: https://developer.android.com/reference/androidx/fragment/app/DialogFragment.html
  • FragmentManager: https://developer.android.com/reference/androidx/fragment/app/FragmentManager.html
  • FragmentTransaction: https://developer.android.com/reference/androidx/fragment/app/FragmentTransaction.html
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

三句代码创建全屏Dialog或者DialogFragment:带你从源码角度实现全屏Dialog

不让显示Title部分,关键点2就是常用setContentView,关键点3根4就是为了全屏对话框做修改,关键点4必须要放在setContent后面,因为如果放在setContent该属性会被冲掉无效...如果你想封装一个统一全屏Dialog,那可以吧关键点1放在构造方法中,把关键点3与4放在onStart中,其实就是主要是保证setContentView执行顺序, public class FullScreenDialog...针对DialogFragment实现方式 Android比较推荐采用DialogFragment实现对话框,它完全能够实现Dialog所有需求,并且还能复用Fragment生命周期管理,被后台杀死后还能自动恢复...之后再来看最后遗留一个问题,为什么么要Window.FEATURE_NO_TITLE属性,并且需要在setContentView被调用之前。...创建沉浸式全屏Dialog 在全屏Dialog基础上,我们可以创建沉浸式Dialog,也就是让Dialog内容区域延展到状态栏下方,由于这里用到了fitsystemwindow,所以要牵扯DecorView

4K40
  • 仿iOS底部弹框实现及分析

    1 弹框布局: 我们可以来看下这个弹框有哪些显示: 标题(一个标题) ? 选项(N个选项,此处图片只有关闭这一个选项) ? 底部一个取消按钮(一个取消按钮) ?...所以我们先考虑这个弹框布局就需要: ? 因为中间菜单是一个列表,所以根据这个图我们可以想到我们所要写弹框布局大致为: ? 我们已经规划好了弹框布局,现在我们要开始实现弹框了。...2 实现弹框: 因为后来谷歌推荐使用DialogFragment,所以我们此处弹框也是使DialogFragment。...标题内容上方有一块区域 我们弹框布局底部背景色默认是灰色 我们针对这二个先做处理: 其实我们上方一块区域是弹框标题, 我们在IOSDialogFragment中添加: ?...6 点击空白让弹框消失问题: 当点击上方一些空白处,我们会发现我们弹框会直接消失,而不会像我们上面点击按钮点击事件那样,弹框先往下移动再消失,因为DialogFragment默认点击弹框外时候

    1.9K10

    android推荐使用dialogFrament而不是alertDialog

    DialogFragment在android 3.0时被引入。是一种特殊Fragment,用于在Activity内容之上展示一个模态对话框。典型用于:展示警告框,输入框,确认框等等。...6、DialogFragment做屏幕适配 我们希望,一个对话框在大屏幕上以对话框形式展示,而小屏幕上则直接嵌入当前Actvity中。这种效果对话框,只能通过重写onCreateView实现。...,如果是大屏幕则直接以对话框显示,如果是小屏幕则嵌入我们Activity布局中 这个R.bool.large_layout是我们定义资源文件: 在默认values下新建一个bools.xml <...而通过DialogFragment实现对话框则可以完全不必考虑旋转问题。...可以看到,传统Dialog旋转屏幕时就消失了,且后台log会报异常~~~使用DialogFragment则不受影响。 好了,关于DialogFragment介绍结束~~~~ 源码点击下载

    2.4K50

    Android 撸起袖子,自己封装 DialogFragment

    内容之上显示一个静态对话框。...基类,那么接下来我们当然要好好地来实现各种类型 DialogFragment 了,我思路是创建一个 DialogFragmentHelper 作为实现提示框帮助类,帮我们把代码都封装起来,使用时候只需要关注与...,将一个 ProgressDialog 传进去,然后依次传入 cancelable 和 cancelListener,最后调用 show() 函数,将DialogFragment 显示出来,因为我们使用了构造函数重载...应该还没忘了我们上面创建了一个 IDialogResultListener 用于 DialogFragment 与逻辑层之间进行数据监听吧,为了能传入各种各样类型数据,这里我使用了 泛型 来进行处理...---- 猜你喜欢 手把手教你从零开始做一个好看 APP Android 能让你少走弯路干货整理 Android 一款十分简洁、优雅日记 APP

    1.3K41

    DialogFragment踩坑记

    忙完了美国大选,可以继续更新公众号了 DialogFragment推出来已经很久了,网上相关文档一大堆,但是稍微不注意,还是会踩坑,本篇基于自身经历总结 要选android X下DialogFragment...普通Fragment还是DialogFragment 同时设置不要Title跟背景 隐藏Dialog 不保留活动 显示逻辑 推荐使用DialogFragment 要选android X下DialogFragment...版本,记得要选择第一种DialogFragment,当然,系统源码也很贴心把它FrameworkDialogFragment设置为不推荐使用,而且还注明让你使用support包下面的DialogFragment...特别强调是,这个报错自测阶段很不容易暴露出来,但是一上线上环境就容易发生,需要注意规避 不保留活动 这是一个不得不考虑场景,实际情况下,发生了不保留活动,业务这边逻辑一般是重置了,所以也是不需要再展示...在监听到onResume时候,触发Dialog显示,代码就不贴了 推荐使用DialogFragment 建议展示Dialog地方,统一使用DialogFragment,更好处理生命周期各种场景

    2.1K30

    解决Android中自定义DialogFragment解决宽度和高度问题

    关于详解Android应用中DialogFragment基本用法,大家可以参考下。 1、 概述 DialogFragment在android 3.0时被引入。...是一种特殊Fragment,用于在Activity内容之上展示一个模态对话框。典型用于:展示警告框,输入框,确认框等等。...2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好管理其声明周期,它和Fragment有着基本一致声明周期。...且DialogFragment也允许开发者把Dialog作为内嵌组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同效果)。...高度固定,那么我们需要设置DialogFragment高度,在FragmentonResume()声明周期方法中设置window宽高即可。

    4.9K20

    项目需求讨论-仿ios底部弹框实现及分析

    弹框布局: 我们可以来看下这个弹框有哪些显示: 标题(一个标题) ? 选项(N个选项,此处图片只有关闭这一个选项) ? 底部一个取消按钮(一个取消按钮) ?...因为中间菜单是一个列表,所以根据这个图我们可以想到我们所要写弹框布局大致为: <!...---- 实现弹框: 因为后来谷歌推荐使用DialogFragment,所以我们此处弹框也是使用DialogFragment。...标题内容上方有一块区域 我们弹框布局底部背景色默认是灰色 我们针对这二个先做处理: 其实我们上方一块区域是弹框标题, 我们在IOSDialogFragment中添加:@Override public...所以消失时候我们不能单纯DialogFragment执行dismiss(),而是先让弹框执行下移动画效果,然后再dismiss()。

    1.1K30

    DialogFragment自动弹出软键盘,消失时关闭软键盘

    hideSoftInputFromWindow(binding.etChat.windowToken, 0) } 复制代码 在DialogFragment显示时弹出软键盘 在DialogFragment...显示时有两种方式弹出软键盘: 1、在onViewCreated中发送一个延时任务 etChat.postDelayed({ showSoftInput() }, 200) 复制代码 注意:如果直接调用显示键盘不会起作用...再来看 mServedView不为null值,发现是我 DialogFragment 依附 activity布局控件,可以理解为当前获取焦点控件,因此可以传入activity中当前焦点所在view...自定义Dialog在dismiss之前通知 DialogFragment 关闭软键盘 转变思路,既然在 DialogFragment 中无法提前监听dialog关闭,那就自定义Dialog重写dismiss...最后,还有一种方式就是使用全屏dialog,在原先空白区域加一个透明View,设置view点击事件去关闭软键盘和弹窗,这样就避免了点击空白处关闭问题。

    5.2K40

    Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

    举个栗子 我们创建一个Activity,并且在onCreate函数中新建并show一个DialogFragment,之后通过某种方式将APP异常杀死(RogueKiller模拟后台杀死工具),再次从最近任务唤起...虽然被杀死了,但是onCreate函数在执行时候还是只执行了一次啊,为什么会出现两个DialogFragment,这里其实就有一个DialogFragment是通过Android自身恢复重建机制重建出来...Fragmentadd逻辑:此时被后台杀死,或旋转屏幕,被恢复DialogFragmentActivity时会出现两个FragmentDialog,一个被系统恢复一个新建。...,2.3之后,放在了onStop函数之前,也就说Activity失去焦点后,可能会由于内存不足,被回收情况下,都会去执行onSaveInstanceState。...Activity都是可能被后台杀死,比如,在开发者选项中打开不保留活动,就会达到这种效果,在启动另一个Activity时,上一个Activity保存流程大概如下,这里先简单描述,在下一篇原理篇时候

    3K30

    妖怪般VerifyError | 奇形怪状bug

    而之后简单分析了下异常,猜测dialogfragment类本身就出现了问题,所以导致了在类加载时候,验证字节码安全性失败。但是这部分可是androidx内部代码啊,这不就是不讲武德吗?...因为这部分我司做了一部分字节码父类替换,所以DialogFragment其实已经被修改了一部分了。...而在新版本androidx中,则给Fragment添加了另外一个有参构造函数,所以这部分就出现了异常。...借住AS查看Apkbytecode 另一个大佬顺便教会了我如何从apk中去查看最终产物bytecode方式。一个不需要用jadx反编译整个apk就可以快速查看class字节码方式。...这个是摘自另外一个哔哩哔哩安卓巨佬了。

    1K40

    Android中DialogFragment自定义背景与宽高方法

    介绍 DialogFragment在android 3.0时被引入。是一种特殊Fragment,用于在Activity内容之上展示一个模态对话框。典型用于:展示警告框,输入框,确认框等等。...在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。...本文主要给大家介绍了关于Android中DialogFragment自定义背景与宽高相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍吧。...dialog.getWindow().setLayout((int) (dm.widthPixels * 0.9), (int) (dm.heightPixels * 0.76)); } } 总结 以上就是这篇文章全部内容了...,希望本文内容对大家学习或者工作能带来一定帮助,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn支持。

    1.4K41
    领券