分享给大家供大家参考,具体如下: 背景 Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况...Dialog ,需要我们手动处理屏幕翻转的情况,但使用 DialogFragment 的话,则不需要我们进行任何处理,FragmentManager 会自动管理 DialogFragment 的生命周期...方法 ① 在使用了多线程(例如网络请求)的情况下,不能正确的获取当前 Fragment 的状态,会产生空指针异常。...对于方法 ① 无法正确返回其状态,方法 ② 则正常。...更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图
Dialog ,需要我们手动处理屏幕翻转的情况,但使用 DialogFragment 的话,则不需要我们进行任何处理,FragmentManager 会自动管理 DialogFragment 的生命周期...扩展阅读:Dialog 在屏幕翻转时的处理 无标题栏/全屏 在基本用法里代码注释有设置主题的地方,下面详细说下两种方法下设置无标题栏和实现全屏的方式: 无标题栏 对于方法 ① : @Override public...应用场景区别 文章一开始简单总结了方法 ① 和方法 ② 的应用场景,这里说明下: 从基本的用法中可以看到方法 ① 为简单的替代 Dialog 提供了非常方便的创建方式,比方法 ② 有优势 方法 ① 在使用了多线程...对于方法 ① 无法正确返回其状态,方法 ② 则正常。...方法 ① 和方法 ② 创建 DialogFragment 的一些状态并不是完全一致。
调整后 : 在大尺寸屏幕上,我们使用了 DialogFragment,于是编辑任务的界面就悬浮在了其他内容之上。...△ 悬浮的编辑组件将关注点放在用户当前的目标内容上 起初我们尝试将编辑任务界面取代任务详细信息 (Task Detail) 显示在详细信息窗格中。...相比之下,DialogFragment 吸引了用户,让关注点处于前面和中间。 在用户保存自己的改动或是我们确认用户的修改可以取消之前,我们不希望从编辑任务 (或者新建任务) 界面导航到其他地方。...原本全屏显示编辑界面时,这种请求很容易被拦截,因为唯一离开此界面的方式就是使用返回键。...使用 DialogFragment 之后,所有的这些元素都位于对话框之后,使得用户不能与它们交互,这恰恰是我们想要的效果。
了解Navigation使用后,思考几个问题 NavHostFragmnet作为路由容器,是如何解析nav_graph资源文件,从而生成NavGraph对象? 跳转时,路由是如何被执行的?...所以进入方法时是这个根节点标签,1.中navigator=NavGraphNavigator 2.navigator.createDestination()就是dest=new...mBackStack,如果回退栈为空,那么mGraph一定是第一个添加的元素 把新的目标NavDestination也加入进回退栈 经过这里,导航具有了返回栈的能力。...总结一下几点: Navigator.Name 是个注解类,他会用在所有Navigator所有子类的类头,用来标记 子类是什么类型的Navigator 自定义自己的Navigator,必须继承Navigator...支持Deeplink 可视化编辑页面 回退栈管理 Android组件(如:BottomNavigationView)完美交互,JetPack其他组件联合使用 缺点: 所有节点定义在nav_graph.xml
2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。...且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。...上面会通过例子展示这些好处~ 使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。...MainActivity中需要实现我们的接口LoginInputListener,实现我们的方法,就可以实现当用户点击登陆时,获得我们的帐号密码了: c) MainActivity package...可以看到,传统的Dialog旋转屏幕时就消失了,且后台log会报异常~~~使用DialogFragment则不受影响。 好了,关于DialogFragment的介绍结束~~~~ 源码点击下载
消失时关闭软键盘 dialog关闭分为几种情况,处理方式不一样: 1.用户手动调用DialogFragment.dismiss() 这时可以重写dismiss方法,在调用之前关闭软键盘。...DialogFragment本身没有监听关闭之前的方法,只有两个相关方法onCancel(dialog: DialogInterface)和onDismiss(dialog: DialogInterface...mService.hideSoftInput 断点发现当在onCancel中关闭软键盘时 mServedView为null,所以走不到关闭代码,看一下mServedView在哪赋值为null的 void...方法,在Dialog关闭之前告知 DialogFragment 关闭软键盘 class EditDialog(context: Context?...最后,还有一种方式就是使用全屏dialog,在原先空白区域加一个透明的View,设置view的点击事件去关闭软键盘和弹窗,这样就避免了点击空白处关闭的问题。
普通的Fragment还是DialogFragment 同时设置不要Title跟背景 隐藏Dialog 不保留活动 显示的逻辑 推荐使用DialogFragment 要选android X下的DialogFragment...版本的,记得要选择第一种DialogFragment,当然,系统源码也很贴心的把它Framework的DialogFragment设置为不推荐使用,而且还注明让你使用support包下面的DialogFragment...,当然项目也基本都从support转成了Android x,感觉这个注释可以更新下了 普通的Fragment还是DialogFragment 先看下系统onCreate的方法 mShowsDialog...()方法来展示 DialogFragment如果只是当做普通的Fragment,建议使用普通的Fragment就可以了,这样代码逻辑比较清晰 同时设置不要Title跟背景 想同时不要Title跟背景,...在监听到onResume的时候,触发Dialog的显示,代码就不贴了 推荐使用DialogFragment 建议展示Dialog的地方,统一使用DialogFragment,更好的处理生命周期的各种场景
使用lifecycle-runtime-ktx库中的launchWhenX方法,对Channel的收集协程会在组件生命周期 < X时挂起,从而避免异常。...根据之前分析的诉求,空档期的事件不能丢弃,而应该在Activity回到活跃状态时依次消费。所以考虑当缓冲区溢出时策略为挂起,容量默认0即可,即默认构造方法即符合我们的需求。...发现问题 DialogFragment和Activity的通信 我们通常使用DialogFragment来实现弹窗,在其宿主Activity中设置弹窗的点击事件时,如果回调函数中引用了Activity对象...看起来EventBus是一种实现方法,但是已经有了ViewModel作为媒介再使用显然有些浪费,EventBus还是更适合跨页面、跨组件的通信。...可以选择使用StateFlow/LiveData收敛页面全部状态,也可以拆分成多个。但更加建议按UI组件模块拆分收敛。 跳过使用Intent,直接调用ViewModel方法也可以接受。
关于详解Android应用中DialogFragment的基本用法,大家可以参考下。 1、 概述 DialogFragment在android 3.0时被引入。...2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。...且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。...上面会通过例子展示这些好处~ 使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。...的高度固定,那么我们需要设置DialogFragment的高度,在Fragment的onResume()声明周期方法中设置window的宽高即可。
本文的主要内容 DialogFragment 是什么 创建通用的 CommonDialogFragment 实现各种类型的 DialogFragment 在写正文之前,先来一波效果展示吧 ?...DialogFragmentDemos.gif 一、DialogFragment 是什么 DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity...基本一样的生命周期,使用 DialogFragment 来管理对话框,当旋转屏幕和按下后退键的时候可以更好的管理其生命周期 在手机配置变化导致 Activity 需要重新创建时,例如旋转屏幕,基于 DialogFragment...的对话框将会由 FragmentManager 自动重建,然而基于 Dialog 实现的对话框却没有这样的能力 2、DialogFragment 的使用 使用 DialogFragment 至少需要实现...onCreateView() 或者 onCreateDialog() 方法,onCreateView() 即使用自定义的 xml 布局文件来展示 Dialog,而 onCreateDialog() 即使用
然后你可以在onCreate()或onRestoreInstanceState()方法中恢复。 b、如果是大量数据,使用Fragment保持需要恢复的对象。 c、自已处理配置变化。...这里,如果在异步数据完成加载之后,旋转屏幕,使用上述a、b两种方法都不会很难,无非是保存数据和恢复数据。...c)谷歌的官方不建议使用ProgressDialog,这里我们会使用官方推荐的DialogFragment来创建我的加载框,如果你不了解:请看 Android 官方推荐 : DialogFragment...当然了,运行过程中Activity不断的重启,我们也提供了setActivity方法,onDestory时,会setActivity(null)防止内存泄漏,同时我们也会关闭与其绑定的加载框;当onCreate...,当用户在使用你的app时,忽然接到一个来电,长时间没有回到你的app界面也会造成Activity的销毁与重建,所以一个行为良好的App,是有必要拥有恢复数据的能力的~~。
全屏Dialog 全屏Dialog实现方法 这里对象分为两种,一种是针对传统的Dialog,另一种是针对DialogFragment(推荐),方法也分为两种一种是利用代码实现,另一种是利用主题样式Theme...针对DialogFragment的实现方式 Android比较推荐采用DialogFragment实现对话框,它完全能够实现Dialog的所有需求,并且还能复用Fragment的生命周期管理,被后台杀死后还能自动恢复...(推荐使用DialogFragment,它复用了Fragment的声明周期,被杀死后,可以恢复重建) public class FragmentFullScreen extends DialogFragment...,导致上面的状态栏,底部的导航栏,左右都有一定的边距 <inset xmlns:android="http://schemas.android.com/apk/res/android" android...,会将这里的边距考虑进去,而且对于windowIsFloating = false的Window,会将状态栏及底部导航栏考虑进去(这里不分析)。
本文实例讲述了Android基于DialogFragment创建对话框的方法。...分享给大家供大家参考,具体如下: /** * 使用DialogFragment创建对话框 * @description: * @author ldm * @date 2016-5-12 下午2:...需要实现onCreateView或者onCreateDIalog方法。...* onCreateView():使用定义的xml布局文件展示Dialog。 * onCreateDialog():利用AlertDialog或者Dialog创建出Dialog。...:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结
DialogFragment也是Google推荐使用的一种对话框实现方案,虽然我认为DialogFragment能实现的功能用Dialog也都能实现,但是强制使用Dialog确实显得有那么一些不友好。...当时我的想法是,PermissionX只定义显示对话框,关闭对话框等必要的接口,至于实现方面不做任何限制,你可以用Dialog,也可以用DialogFragment,甚至可以用PopupWindow,或者是完全自定义的控件都行...所以最终我采取了和之前一样的方式,增加了一个RationaleDialogFragment的类,该类是继承自DialogFragment的,里面也定义了PermissionX所要求的几个必要的方法,开发者在使用...DialogFragment自定义对话框时同样将这几个必要的方法进行实现即可。...看上去好像并不是什么重磅功能,但恰恰相反,优化默认权限提醒对话框相当重要,这大大提升了PermissionX的用户体验,同时大大降低了PermissionX的使用成本,因为自定义对话框总体来说还是比较麻烦的
Ionic过去使用的典型Push/Pop风格导航仍然可用,您甚至可以直接通过Ionic的Web组件使用这种导航方式,但推荐的方法是使用Angular Router。...;后者注重代码管控,好处是它允许您指定导航的“方向”,这将有助于Ionic 正确显示页面过渡。...相反,你应该只依赖于原始导航,无论你使用Ionic的框架是什么。...action-sheet-controller loading-controller …… 前面2个一般是有自定义UI的,在ionic3中是可通过自定义组件注入ViewController来关闭窗口,...在ionic4中已经没有这个方法,改为通过监听事件或回调给外面的xxx-controller来关闭。
使用总结 做一些业务,但是目标却是用 DialogFragment 实现类似 PopupWindow 效果: 只拦截自身所占空间部分的事件,其余空间的点击事件不处理 可以根据某个 View 定位自身位置...虽然在功能上 PopupWindow 更符合需要,但是使用 DialogFragment 代码更简洁、更方便封装功能模块。...和 FLAG_TRANSLUCENT_STATUS 主要是用来调整使用沉浸式状态栏时显示自身位置不正确的问题。...获取 View 位置的时机 如果需要让 DialogFragment 在 onCreate() 等生命周期函数内直接调用显示到某个 View 的位置处,可能无法正确获取到该 View 的坐标,具体参考...,需要使用 TopFragment.getInstant(int y, boolean isTranslucentDecor) 方法,并且 isTranslucentDecor 传值为 true 。
如何使用DialogFragment 有两种方法 实现onCreateDialog方法 通过继承DialogFragment并且实现它的onCreateDialog(Bundle savedInstanceState...)方法来创建一个DialogFragment,这个方法返回的是一个Dialog,意味着我们需要创建一个AlertDialog,并返回。...,而是在DialogFragment中的onDestroyView()回调时,才会对DialogFragment进行出栈操作,所以如果你如果需要在Activity中频繁的显示隐藏一个DialogFragment...,那么在dismiss时需要手动的调用dismissAllowingStateLoss()方法,并且再次show时不能用上一个DialogFragment实例。...,所以我们如果需要对Dialog的消失进行监听的话只需重写onDismiss方法即可,还有一种方式则是覆盖父类设置的onDismissListener监听,但是需注意的时,这个监听的复写,必须在父类onActivityCreate
等到录音结束,停止服务后,便会回调 RecordingService 的 onDestroy() 方法,这时候便会调用 stopRecording() 方法,关闭 mRecorder,并用 SharedPreferences...,总不能让 App 跳转到另外一个界面吧,这样用户体验并不是很好,比较好的方法是显示一个对话框,让用户进行操作,既然要用对话框,必然离不开 DialogFragment,对于 DialogFragment...,然后根据 mStartRecording 的值进行 RecordingService 的启动和关闭罢了。...在启动时还顺便开始了 mChronometer 的计时显示,这是一个 Android 原生的显示计时的一个控件。...当 MediaPlayer 的内容播放完成后,调用 stopPlaying() 方法,关闭 mMediaPlayer。
粘性标签——这就是你设置了 IMMERSIVE_STICKY 标签时的 UI 状态,用户会向内滑动以展示系统栏。半透明的系统栏会临时的进行显示,一段时间后自动隐藏。...你可以只使用其中的一个,但是一般情况下你需要同时隐藏状态栏和导航栏以达到沉浸的效果。...另例:需要注意dialogFragment和Dialog是有自己的window,该window是属于所属Activity的子window,所以设置dialogFragment和Dialog的沉浸式改变的是自己...关闭销毁:在activity的onDestroy方法中执行,因为mImmersionBarMap存储了每个Activity对应的ZanImmersionBar对象,所以当Activity关闭了需要及时释放...2.5 在 PopupWindow 中实现沉浸式 重点是调用以下方法,但是此方法会导致有导航栏的手机底部布局会被导航栏覆盖,还有底部输入框无法根据软键盘弹出而弹出。
另一方面,因为这些组件中的大多数是从特定的情况而来的,并且不是所有人都有跨多重环境重用组件的设计经验,所以这些组件中的许多东西都不能很好地与Vue生态系统配合使用。 “很好”是什么意思?...在探索了广泛的开源组件之后,下面几点,我认为下面是如何制作一个良好运行的Vue组件方式: 实现v-model兼容性 事件透明化 为正确的元素分配属性 接受浏览器的键盘导航规范 使用事件优先于回调 限制组件样式...不过,Vue 确实为我们提供了一种以编程方式访问应用于组件的侦听器的方法,因此我们可以将它们分配到正确的位置:$listener对象。 再一想,原因很明显:这允许我们将侦听器传递到组件中的正确位置。...,也是编写要在生态系统中正常运行的组件时要正确处理的最重要的事情之一。...使用事件优先于回调 当涉及到从组件到其父组件的数据通信和用户交互时,有两个常见的选择:props中的回调函数和事件。
领取专属 10元无门槛券
手把手带您无忧上云