首页
学习
活动
专区
工具
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

4.2K40
  • 仿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

    DialogFragment踩坑记

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

    2.2K30

    Android 撸起袖子,自己封装 DialogFragment

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

    1.4K41

    项目需求讨论-仿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自身的恢复重建机制重建出来...Fragment的add逻辑:此时被后台杀死,或旋转屏幕,被恢复的DialogFragmentActivity时会出现两个FragmentDialog,一个被系统恢复的,一个新建的。...,2.3之后,放在了onStop函数之前,也就说Activity失去焦点后,可能会由于内存不足,被回收的情况下,都会去执行onSaveInstanceState。...Activity都是可能被后台杀死的,比如,在开发者选项中打开不保留活动,就会达到这种效果,在启动另一个Activity时,上一个Activity的保存流程大概如下,这里先简单描述,在下一篇原理篇的时候

    3.1K30

    妖怪般的VerifyError | 奇形怪状的bug

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

    1K40

    Android 录音功能直接拿去用

    ,花了些时间封装成一个录音的工具包,分享给大家,需要源码的 点击这里 先贴个效果图给大家看一下,看看这个录音包的功能 ?...,总不能让 App 跳转到另外一个界面吧,这样用户体验并不是很好,比较好的方法是显示一个对话框,让用户进行操作,既然要用对话框,必然离不开 DialogFragment,对于 DialogFragment...在启动时还顺便开始了 mChronometer 的计时显示,这是一个 Android 原生的显示计时的一个控件。...外部调用这个对话框的时候,只需要传入一个包含录音文件信息的 RecordingItem,因为包含的信息比较多,所以最好将 RecordingItem 进行序列化。...Android 撸起袖子,自己封装 DialogFragment 手把手教你从零开始做一个好看的 APP

    3.1K31

    跟我学在高德地图——标注我的位置

    大家好,又见面了,我是你们的朋友全栈君。...这里使用的SDK为AMap_Location_V2.5.0_20160526.jar 没有接触过高德地图的同学,请参考 加载一张高德地图 1.获取我的位置 package com.pansoft.oilgas.gaodenavigation...定义一个DialogFragment展示数据,不熟悉DialogFragment的同学请参考 AltertDialog在DialogFragment中的使用 package com.pansoft.oilgas.gaodenavigation...; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import...4.在地图上标注我的位置 在原来代码的基础上,添加地图MapView 不熟悉的同学,请参考 加载一张高德地图 在onCreate中添加,获取我的位置的相关部分 // show my location

    1.1K10

    原来在Android中请求权限也可以有这么棒的用户体验

    支持DialogFragment 刚才已经提到了,在上一个版本当中,PermissionX引入了自定义权限提醒对话框的功能,使得开发者可以自由地定制你想要的对话框样式。...DialogFragment也是Google推荐使用的一种对话框实现方案,虽然我认为DialogFragment能实现的功能用Dialog也都能实现,但是强制使用Dialog确实显得有那么一些不友好。...虽然上述方案是否定了,但是对于DialogFragment的需求却是实实在在存在的。...所以最终我采取了和之前一样的方式,增加了一个RationaleDialogFragment的类,该类是继承自DialogFragment的,里面也定义了PermissionX所要求的几个必要的方法,开发者在使用...DialogFragment自定义对话框时同样将这几个必要的方法进行实现即可。

    2.6K30

    实践 | 为 Trackr app 适配大屏幕设备

    Trackr 是一个可以管理任务的示例应用,除了主要用于从支持辅助功能的角度探索通用的 UI 范例外,它还是我们展示现代 Android 开发最佳实践的示例之一。...于是我们将第二个悬浮操作按钮隐藏,并在右上角的工具栏添加了一个编辑按钮。...调整后 : 在大尺寸屏幕上,我们使用了 DialogFragment,于是编辑任务的界面就悬浮在了其他内容之上。...△ 悬浮的编辑组件将关注点放在用户当前的目标内容上 起初我们尝试将编辑任务界面取代任务详细信息 (Task Detail) 显示在详细信息窗格中。...使用 DialogFragment 之后,所有的这些元素都位于对话框之后,使得用户不能与它们交互,这恰恰是我们想要的效果。

    1.7K20

    Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    c)谷歌的官方不建议使用ProgressDialog,这里我们会使用官方推荐的DialogFragment来创建我的加载框,如果你不了解:请看 Android 官方推荐 : DialogFragment...这样,其实给我们带来一个很大的问题,DialogFragment说白了是Fragment,和当前的Activity的生命周期会发生绑定,我们旋转屏幕会造成Activity的销毁,当然也会对DialogFragment...,相信看到这,已经知道经常上述问题的一个核心了,保存一个异步任务,在重启时,继续这个任务。...Activity销毁,将与上一个Activity绑定的DialogFragment销毁 if (activity == null) { mLoadingDialog.dismiss();...,当用户在使用你的app时,忽然接到一个来电,长时间没有回到你的app界面也会造成Activity的销毁与重建,所以一个行为良好的App,是有必要拥有恢复数据的能力的~~。

    2.1K20
    领券