接着创建一个AlertDialog.Builder对象,在该Builder对象中嵌入布局视图,并设置标题、确定按钮、取消按钮。...最后还要提供一个回调接口,用于主页面上处理日期和时间的选择事件,同时在确定按钮的点击事件中要触发该回调接口的方法。...下面是重写后的日期和时间对话框的代码 import java.util.Calendar; import java.util.Date; import android.annotation.SuppressLint...onCreateDialog方法后面当然要依例添加AlertDialog.Builder对象,依次设置标题、内容、图标、确定按钮、取消按钮等元素,其中确定按钮的点击事件需要调用回调接口的处理方法。...最后便是在主页面中调用自定义的提示对话框。
新Activity启动及旧Activity保存流程 App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity...虽然被杀死了,但是onCreate函数在执行的时候还是只执行了一次啊,为什么会出现两个DialogFragment,这里其实就有一个DialogFragment是通过Android自身的恢复重建机制重建出来...现在回归正题,对于后台杀死状态下,为什么会show两个DialogFragment呢,我们需要接着看就要Fragment的异常处理的流程,在Fragment没有无参构造方法会引发崩溃里面,分析只是走到了...在恢复后,能自动定位到上次浏览的位置。...ViewPager应对后台杀死做的兼容 首先看一下ViewPager做的兼容,ViewPager在后台杀死的情况下,仍然能恢复到上次关闭的位置,这也是对体验的一种优化,这其中的原理是什么?
01 概述 DialogFragment是在Android 3.0的时候被引入的, 目的是dialog也变成了碎片。DialogFragment是Fragment的子类,用于创建于用户交互的对话框。...在DialogFragment未哇哇坠地之前,我们一般用AlertDialog和Dialog来创建对话框。现在,谷歌官方不建议直接使用Dialog创建对话框。...02 优点 DialogFragment的生命周期和Fragment是一致的。它同样具有自己的窗口,能处理接受用户的输入事件以及处理销毁控件的事件(通过按下返回键或者用户点击对话框的取消键)。...因此它便于Activity更好的控制管理DialogFragment 相比Dialog,DialogFragment能完美横竖屏幕切换的问题。...最简单、最方便的方法是利用Java的接口回调机制,在DialogFragment类中定义一个回调接口, Activity(Framgent)实现该接口。 在DialogFragment类中 ?
本篇文章已授权为微信公众号 code小生 发布 前言 具体的代码以及示例我都放上 Github 了,有需要的朋友可以去看一下 DialogFragmentDemos,欢迎 star 和 fork....基本一样的生命周期,使用 DialogFragment 来管理对话框,当旋转屏幕和按下后退键的时候可以更好的管理其生命周期 在手机配置变化导致 Activity 需要重新创建时,例如旋转屏幕,基于 DialogFragment...的封装,至于 DialogFragment 具体的使用,可以参考下洋神的这篇文章 Android 官方推荐 : DialogFragment 创建对话框 二、创建通用的 CommonDialogFragment...= null){ mCancelListener.onCancel(); } 这便是我们在构造函数中传入 OnCancelListener 的原因,当我们想要做一些取消对话框后的处理时,只要在构造函数中传入...-- 按钮字体颜色,全部一起改,单个改需要在Java代码中修改 --> @color/app_main_color
快捷登录方式选择 当用账号密码登录成功后,我们就在登录界面直接弹出一个弹框,然后让用户选择想要的快捷登录方式,当然如果用户二种都不想要,那就直接按取消,然后登录到主页,然后下次再打开应用就会又要重新输入账号密码...具体的大家去百度下DialogFragment即可。...验证指纹 要开始扫描用户按下的指纹是很简单的,只要调用FingerprintManager的authenticate方法即可,那么现在我们来看一下这个接口: ?...这里写图片描述 下面我们简要介绍一下这些接口的含义: OnAuthenticationError(int errorCode, ICharSequence errString) 这个接口会再系统指纹认证出现不可恢复的错误的时候才会调用...但是这个错误是可以恢复的,因此只要提示用户再次按下指纹,并且不要太快移走就可以解决。
但是放开对话框的实现方式之后,开发者需要对自己实现的对话框负责,你需要考虑用户点击确定按钮后重新请求权限,需要考虑用户点击取消按钮后回调请求结果,需要考虑对话框取消的时候如何防止权限请求事件丢失,需要考虑横竖屏旋转时怎样防止...目前,默认的权限提醒对话框上,权限组图标、确定、取消按钮,使用的都是蓝色。而如果你觉得这种颜色和你们项目主题风格不搭的话,也可以设置成任意你想要的颜色。...可以看到,对话框上的权限组图标、确定、取消按钮的颜色都得到了修改,使用这种方式就可以让PermissionX更好地贴合你们项目的主题风格了。...如何升级 关于PermissionX新版本的内容变化就介绍到这里,升级的方式非常简单,修改一下dependencies当中的版本号即可: dependencies { ......implementation 'com.permissionx.guolindev:permission-support:1.4.0' } PermissionX的项目主页地址是: https://github.com
2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。...> false 然后在res下新建一个values-large,在...values-large下再新建一个bools.xml <?...左边为模拟器,右边为我的手机~~~~~ 7、屏幕旋转 当用户输入帐号密码时,忽然旋转了一下屏幕,帐号密码不见了~~~是不是会抓狂 传统的new AlertDialog在屏幕旋转时,第一不会保存用户输入的值...,第二还会报异常,因为Activity销毁前不允许对话框未关闭。
这是为了在用户按下返回键时,能够回到上一个页面。 commit : 提交事务 commitAllowingStateLoss : 提交事务时允许状态丢失。...commitAllowingStateLoss方法便是兼容的做法,即使状态丢失也允许提交,但这其实是不安全的做法,要避免不安全的情况发生,得注意以下几点: 1、不要在onResume中调用commit方法,因为此时可能状态尚未恢复...2、代码中需要判断当前界面是横屏还是竖屏,然后补充相应的处理逻辑,例如竖屏时切换页面要增加“fragmentTrs.addToBackStack(null);”,这是模拟按下返回键时回到上个页面。...3、竖屏的页面切换后,因为根节点是FrameLayout,所以上一页面只是界面被覆盖了,可是点击事件这些都还在。...onActivityCreated : 在Activity页面创建完毕之后调用,这意味着onCreateView有可能在主页面尚未创建完毕时就完成了,比如说在主页面的onCreate方法中加入Fragment
对于iPhone 6及更旧型号:同时按下主页键和电源键,直到看到苹果标志。 对于iPhone 7和7 Plus:同时按下电源按钮和音量降低按钮,当你在屏幕上看到苹果标志时松开按钮。...对于iPhone 8及更新机型:快速按下并松开音量增大按钮,然后快速按下并松开音量减小按钮。最后,按住侧边按钮直到屏幕上出现苹果标志。...强制重启iPhone.jpg 方法三、使用主页 + 音量增大 + 电源键 如果硬强制重启不起作用,那么还有另一种按钮组合可以帮助修复iPhone白屏死机问题: 同时按住主页按钮、音量增大按钮和电源...继续按住这些按钮,直到出现苹果标志。 当苹果标志出现时,您可以松开按钮,让iPhone像往常一样启动。 显然,这种方法仅适用带主页按钮的 iPhone 机型。...然后,你需要将iPhone置于恢复模式。不同设备的步骤略有不同。(您可以参考强制重启的步骤。) 将iPhone置于恢复模式后,iTunes将检测您的iPhone处于恢复模式。
忙完了美国大选,可以继续更新公众号了 DialogFragment推出来已经很久了,网上相关的文档一大堆,但是稍微不注意,还是会踩坑,本篇基于自身经历总结 要选android X下的DialogFragment...普通的Fragment还是DialogFragment 同时设置不要Title跟背景 隐藏Dialog 不保留活动 显示的逻辑 推荐使用DialogFragment 要选android X下的DialogFragment...这个时候,可以去网上搜索下,可以发现一大堆的答案,都是需要繁琐的配置各种theme,最少也需要十几行代码,其实看下源码,就可以轻松知道,只要下面一行代码就可以了 在onCreate9()的时候设置下 setStyle...用户按了home键去操作其他的,这个时候调用dismiss,就会触发这个报错 可以改成DialogFragment#dismissAllowingStateLoss方法,就不会走到checkStateLoss...建议展示Dialog的地方,统一使用DialogFragment,更好的处理生命周期的各种场景,而且在Fragment回收后,也可以自动帮我们关闭Dialog,避免逻辑异常 public void onDestroyView
这里我们打一些log仔细观察一下生命周期的变化。 [生命周期图示] 生命周期变化 执行一些常见的操作,打log看一下生命周期的变化。...onWindowFocusChanged: hasFocus: true onWindowFocusChanged: hasFocus: false onPause onStop onDestroy 启动后按...弹出AlertDialog 点击按钮弹出一个AlertDialog。观察发现调用了onWindowFocusChanged。...onWindowFocusChanged: hasFocus: false onWindowFocusChanged: hasFocus: true 这里也可以用DialogFragment来做测试。...一旦此回调结束,Activity 便会进入已恢复状态,系统将调用 onResume() 方法。
修复 系统夜间模式开启时应用启动后强制开启夜间模式的问题 修复 夜间模式开启后已设置的主题色可能无法生效的问题 修复 夜间模式下部分设置选项文字与背景色相同而无法辨识的问题 修复 关于页面功能按钮文本长度过大导致文本显示不完全的问题...修复 主页抽屉设置项标题长度过大导致文本与按钮重叠的问题 修复 主页抽屉权限开关在提示消息对话框消失后可能出现状态未同步的问题 修复 Root 权限修改主页抽屉权限开关失败时未继续弹出 ADB...修复 布局层次分析时长按列表项可能导致弹出菜单溢出下方屏幕的问题 修复 安卓 7.x 系统在夜间模式关闭时导航栏按钮难以辨识的问题 修复 http.post 等方法可能出现的请求未关闭异常 修复...优化 禁用文档页面双指缩放功能避免文档内容显示异常 优化 任务面板列表项按相对路径简化显示任务的名称及路径 优化 文本编辑器按钮文本适当缩写避免文本内容溢出 优化 文本编辑器设置字体大小支持恢复默认值...优化 提升悬浮窗点击响应速度 优化 点击悬浮窗布局分析按钮直接进行布局范围分析 优化 布局分析主题自适应 (悬浮窗跟随应用主题, 快速设置面板跟随系统主题) 优化 布局控件信息列表按可能的使用频率重新排序
toastListener; } public void getToastListener() { toastListener.showToast(); } } (3) 点击按钮弹窗吐司...效果入下 之前只是简单的说了一下接口,只是知道它定义以后,设置并回调…OK我再举个栗子,加深一下印象 使用Interface进行传值 (设置一个DialogFragment页面) public class...LoginDialogFragment extends DialogFragment { private EditText mUsername; private EditText...} }).setNegativeButton("Cancel", null); return builder.create(); } } 主页面调用这个接口..." + username + ", 密码 :" + password, Toast.LENGTH_SHORT).show(); } } 效果图如下 接下来总结一下接口的使用
Dialog是APP开发中常用的控件,同Activity类似,拥有独立的Window窗口,但是Dialog跟Activity还是有一定区别的,最明显的就是:默认情况下Dialog不是全屏的,所以布局实现不如...针对DialogFragment的实现方式 Android比较推荐采用DialogFragment实现对话框,它完全能够实现Dialog的所有需求,并且还能复用Fragment的生命周期管理,被后台杀死后还能自动恢复...(推荐使用DialogFragment,它复用了Fragment的声明周期,被杀死后,可以恢复重建) public class FragmentFullScreen extends DialogFragment...generateLayout创建根布局,Android系统默认实现了多种样式的根布局应,以应对不同的场景,选择的规则就是用户设置的主题样式(Window属性),比如需不需要Title,而布局样式在选定后就不能再改变了...(大小可以),有些属性是选择布局文件的参考,如果是在setContentView之后再设定,就是失去了意义,另外Android也不允许在选定布局后,设置一些影响布局选择的属性,会抛出异常,原理如下。
底部一个取消按钮(一个取消按钮) ? 所以我们先考虑这个弹框的布局就需要: ? 因为中间的菜单是一个列表,所以根据这个图我们可以想到我们所要写的弹框的布局大致为: ?...2 实现弹框: 因为后来谷歌推荐使用的DialogFragment,所以我们此处弹框也是使DialogFragment。...我们就是单纯的引入我们写的布局,不做其他处理,我们运行后发现界面效果如下图所示: ?...3 弹框从下而上显示: 我们看过ios的弹框效果,是从底部从下而上升起,然后消失的时候也是从上而下消失。...6 点击空白让弹框消失问题: 当点击上方一些空白处,我们会发现我们的弹框会直接消失,而不会像我们上面点击按钮点击事件那样,弹框先往下移动再消失,因为DialogFragment默认点击弹框外的时候
iPhone 8及之后机型:快速按下并松开音量调高按钮,然后快速按下并松开音量调低按钮,最后按住睡眠/唤醒按钮直到iPhone重新启动。...iPhone 6s及更早机型:同时按住睡眠/唤醒 + 主页键。...在某些情况下,iTunes会检测到您的iPhone处于恢复模式并显示以下窗口。如果iTunes无法识别您的iPhone,请按住手机上的电源按钮 + 主页按钮,直到弹出以下消息。...iTunes恢复模式.jpg 第3步:单击恢复将iPhone恢复到出厂设置。完成后,您的iPhone将自动重启。如果您有 iTunes备份,iTunes会提示您恢复备份以找回数据。...安装完成后启动程序,点击 “标准模式”。 choose-repair-mode.jpg 第2步:将黑屏iPhone连接到电脑。
c)谷歌的官方不建议使用ProgressDialog,这里我们会使用官方推荐的DialogFragment来创建我的加载框,如果你不了解:请看 Android 官方推荐 : DialogFragment...这样,其实给我们带来一个很大的问题,DialogFragment说白了是Fragment,和当前的Activity的生命周期会发生绑定,我们旋转屏幕会造成Activity的销毁,当然也会对DialogFragment...在这样的情况下,当你的Activity因为配置发生改变而重启,你可以通过保持一个Fragment来缓解重新启动带来的负担。这个Fragment可以包含你想要保持的有状态的对象的引用。...声明引用指向你的有状态的对象 b) 当Fragment创建时调用setRetainInstance(boolean) c) 把Fragment实例添加到Activity中 d) 当Activity重新启动后,...首先说一下探索过程: 起初,我认为此时旋转无非是再启动一次线程,并不会造成异常,我只要即使的在onDestroy里面关闭上一个异步任务就可以了。
确保你的手指和 iPhone 上的主页按钮干净、干燥。 3. 当你尝试激活Touch ID时,请确保你的手指覆盖了整个主页按钮。在触控ID 扫描时,不要太快点击或移动手指。 4....二、检查 iPhone 上的触控ID设置 将 iPhone 更新到 iOS 15后,触控ID 设置可能会被修改。...请按照以下步骤强制重启你的 iPhone: 按下并快速松开音量调高按钮。按下并快速松开音量降低按钮。然后,按住侧边按钮,直到看到苹果标志。...设备识别后,在iTunes面板上,点击“恢复iPhone”。 3. 然后再次点击“恢复”进行确认。...如果识别失败,你可以尝试将设备进入恢复模式或DFU模式。 第3步:点击“下载”,程序会下载与你设备匹配的固件包。固件下载完成后,点击“立即修复”。
但选型时我们要考虑以下问题,也是LiveData被推荐使用的优势 : 是否会发生内存泄漏,观察者的生命周期遭到销毁后能否自我清理 是否支持线程切换,比如LiveData保证在主线程感知变化并更新UI 不会在观察者非活跃状态下消费事件...需要手动添加lifecycleObserver来保证线程的挂起和恢复,并且不支持协程。考虑使用kotlin协程中的Channel替代。...也可以使用repeatOnLifecycle(State) 来在UI层收集,当生命周期 恢复时再重新启动协程。...Intent:不是传统的Android设计里的Intent,一般指用户与UI交互的意图,如按钮点击。Intent是改变Model的唯一来源。 对比MVVM的区别主要在哪?...但更加建议按UI组件模块拆分收敛。 跳过使用Intent,直接调用ViewModel方法也可以接受。
封装了百度地图,视图切换,设备点位,鼠标按下获取经纬度等。 堆栈窗体,每个窗体都是个单独的qwidget,方便编写自己的代码。...顶部鼠标右键菜单,可动态控制时间CPU+左上角面板+左下角面板+右上角面板+右下角面板的显示和隐藏,支持恢复默认布局。 工具栏可以放置多个小图标和关闭图标。...左侧右侧可拖动拉伸,并自动记忆宽高位置,重启后恢复。 双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。...可设置1+4+9+16画面轮询,可设置轮询间隔以及轮询码流类型等,直接在主界面底部工具栏右侧单击启动轮询按钮即可,再次单击停止轮询。 默认超过10秒钟未操作自动隐藏鼠标指针。.../feiyangqingyun 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
领取专属 10元无门槛券
手把手带您无忧上云