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

为什么我的DialogFragment在安卓11中没有全屏显示?

在 Android 11(API 30)中,DialogFragment 的全屏显示可能受到以下几个因素的影响。以下是一些常见原因及其解决方法:

1. 窗口属性设置不正确

确保在 DialogFragment 中正确设置了窗口属性,以实现全屏显示。通常需要在 onCreateViewonStart 方法中配置窗口属性。

示例代码:

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_fullscreen_dialog, container, false);
    
    // 设置全屏窗口属性
    if (getDialog() != null && getDialog().getWindow() != null) {
        Window window = getDialog().getWindow();
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
                         ViewGroup.LayoutParams.MATCH_PARENT);
        window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }
    
    return view;
}

注意事项:

  • 使用 FLAG_LAYOUT_NO_LIMITS 可以让对话框延伸到状态栏和导航栏,但可能会影响其他 UI 元素的位置。如果不需要这种效果,可以仅设置 MATCH_PARENT 的宽高。

2. 主题和样式配置

确保在 styles.xml 中为 DialogFragment 定义了全屏主题。

示例:

代码语言:javascript
复制
<style name="FullScreenDialog" parent="Theme.MaterialComponents.Light.Dialog.Alert">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

然后在创建 DialogFragment 时应用该主题:

代码语言:javascript
复制
setStyle(DialogFragment.STYLE_NORMAL, R.style.FullScreenDialog);

3. Android 11 的新隐私特性

Android 11 引入了更严格的隐私控制,可能会影响窗口的显示方式。例如,SYSTEM_ALERT_WINDOW 权限的变化可能影响对话框的显示。

解决方法:

  • 确保应用具有必要的权限,并且在运行时正确请求这些权限。
  • 检查是否需要适配 Android 11 的新隐私政策,如 requestOverlayPermission()

4. 布局文件问题

确保 DialogFragment 的布局文件没有设置固定的高度或宽度,导致无法全屏显示。

示例布局(fragment_fullscreen_dialog.xml):

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/white">

    <!-- 你的布局内容 -->

</LinearLayout>

5. 与其他 UI 元素的冲突

有时,其他 UI 元素(如导航栏、状态栏)可能会影响 DialogFragment 的显示。确保在设置窗口属性时考虑到这些因素。

示例:隐藏状态栏和导航栏

代码语言:javascript
复制
if (getDialog() != null && getDialog().getWindow() != null) {
    Window window = getDialog().getWindow();
    window.setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    );
}

注意: 使用 FLAG_LAYOUT_NO_LIMITS 会让视图延伸到屏幕边缘,如果不需要这种效果,可以调整窗口属性以避免覆盖系统 UI。

6. 检查 Fragment 生命周期

确保在正确的生命周期方法中设置窗口属性。例如,在 onStart() 方法中设置窗口大小和位置通常更为可靠。

示例:

代码语言:javascript
复制
@Override
public void onStart() {
    super.onStart();
    if (getDialog() != null && getDialog().getWindow() != null) {
        Window window = getDialog().getWindow();
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
                         ViewGroup.LayoutParams.MATCH_PARENT);
        window.setGravity(Gravity.CENTER);
    }
}

总结

要在 Android 11 中实现 DialogFragment 的全屏显示,需要正确设置窗口属性、应用全屏主题、确保布局文件适配,并考虑新系统的隐私特性。通过逐步检查上述各个方面,通常可以解决全屏显示的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

H5案例分享:微信视频播放全屏问题(转)

微信视频播放全屏问题    在ios和安卓手机里的微信下播放视频时,会遇到不少问题,例如需要手动点击,视频才会播放,并且视频会跳出微信框,出现控制条,如果视频不是腾讯视频,播放完毕会出现腾讯视频的广告推送...换句话说,如果APP不设置,你页面中加了这标签也无效,这也就是为什么安卓手机WeChat 播放视频总是全屏,因为APP不支持playsinline,而ISO的WeChat却支持。...x5-video-player-type:启用同层H5播放器,就是在视频全屏的时候,div可以呈现在视频层上,也是WeChat安卓版特有的属性。...至于为什么同层播放只对安卓开放,是因为安卓不能像ISO一样局域播放,默认的全屏会使得一些界面操作被阻拦,如果是全屏H5还好,但是做直播的话,诸如弹幕那样的功能就无法实现了,所以这时候同层播放的概念就解决了这个问题...安卓微信浏览器是X5内核,一些属性标签比如playsinline就不支持,所以始终全屏。    还有个问题,在Android的微信里面,就算加上了上面的属性,还会出现上下有黑边,不能全屏的问题。

6.8K30

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

全屏Dialog 全屏Dialog实现方法 这里对象分为两种,一种是针对传统的Dialog,另一种是针对DialogFragment(推荐),方法也分为两种一种是利用代码实现,另一种是利用主题样式Theme...不让显示Title部分,关键点2就是常用的setContentView,关键点3根4就是为了全屏对话框做的修改,关键点4必须要放在setContent的后面,因为如果放在setContent该属性会被冲掉无效...其实现全屏的原理同Dialog一样,只不过是时机的把握 public class FullScreen DialogFragment extends DialogFragment { @Nullable...其实View真正显示的点是在Activity resume的时候,让WMS添加View,其实是这里调用WindowManagerGlobal的addView,这里有个很关键的布局参数params,其实传就是...创建沉浸式全屏Dialog 在全屏Dialog的基础上,我们可以创建沉浸式Dialog,也就是让Dialog的内容区域延展到状态栏下方,由于这里用到了fitsystemwindow,所以要牵扯DecorView

4.2K40
  • 视频H5 video最佳实践

    换句话说,如果APP不设置,你页面中加了这标签也无效,这也就是为什么安卓手机WeChat 播放视频总是全屏,因为APP不支持playsinline,而ISO的WeChat却支持。...这里就要补充下,如果是想做全屏直播或者全屏H5体验的用户,IOS需要设置删除 webkit-playsinline 标签,因为你设置 false 是不支持的 ,安卓则不需要,因为默认全屏。...: 启用同层H5播放器,就是在视频全屏的时候,div可以呈现在视频层上,也是WeChat安卓版特有的属性。...至于为什么同层播放只对安卓开放,是因为安卓不能像ISO一样局域播放,默认的全屏会使得一些界面操作被阻拦,如果是全屏H5还好,但是做直播的话,诸如弹幕那样的功能就无法实现了,所以这时候同层播放的概念就解决了这个问题...安卓微信浏览器是X5内核,一些属性标签比如playsinline就不支持,所以始终全屏。

    4.6K30

    Android经典面试题之Kotlin中如何隐藏DialogFragment和Dialog的导航栏

    DialogFragment隐藏导航栏 在 Android 中,使用 DialogFragment 显示对话框时,如果您希望隐藏系统导航栏(如状态栏和导航键),可以通过设置相关的系统 UI 标志来实现。...这需要在 DialogFragment 的视图创建和显示过程中配置窗口属性。...") 小结 通过在 DialogFragment 的 onViewCreated 方法中设置系统 UI 的可见性标志,可以实现隐藏系统导航栏的效果。...这种方法允许您的 DialogFragment 在显示时全屏,并隐藏状态栏和导航栏。...通过这些设置,当显示 Dialog 时,它将隐藏系统导航栏和状态栏,实现全屏显示。如果需要在更多场景下多次使用该样式,可以进一步将其封装或抽取为一个通用组件。

    19410

    安卓手机系统连接电视,最好的方案是什么?

    电视看视频,才有更好的体验。 ? 我最近研究了一下,如何把安卓手机的画面输出到电视机。下面就是我对各种技术方案的总结,希望对大家有用。...手机投屏的原理是,通过家庭 Wifi,将手机画面传送给显示设备。它必须满足两个前提条件:电视机能够上网,并且与手机在同一个局域网。 如果电视机自带安卓系统(或机顶盒有安卓),就可以手机投屏了。...机顶盒就是一个没有屏幕的安卓主机,外接电视作为显示设备。因为要用遥控器操作,跟手机的触屏操作完全不同,所以机顶盒的 App 都需要重新写过,专门适配遥控器和远距离观看。...有些 App 专门做了适配,可以放大到全屏;没有做适配的 App,只能在一个小窗口使用,不能放大到全屏,这导致有些视频 App 没法全屏看。 ?...它就是一个没有屏幕的 Chrome OS 设备。它跟机顶盒的最大不同在于,操作系统不同,机顶盒是安卓,它是 Chrome OS,只适合显示器,只能用键盘 + 鼠标操作。 ?

    5.2K20

    H5直播避坑指南

    页面内联播放问题 在iOS Safari和一些安卓的一些浏览器下播放视频的时候,不能在h5页面中播放视频,系统会自动接管视频 如果需要在h5页面内播放视频,需要在视频标签上加上 webkit-playsinline...视频的高度问题 在安卓下,一些浏览器如QQ浏览器和UC浏览器,系统会把视频的层级调到最高,所以如果想在页面上显示dom元素,都会被视频盖住,单纯的设置该dom的z-index是无效的,如图所示 ?...但是在测试中发现,一些安卓机不支持该属性,如小米手机,所以需要在调用的时候进行一下判断 var player = $('#player')[0];if (player.webkitSupportsFullscreen...这种接管的后果是这时的我们是没有办法控制视频的播放,也没有办法在上面浮动我们的dom元素,如弹幕,礼物这些,会完全被视频盖在下面,所以我们的目标即是解决这种系统接管的问题 3)使用伪全屏(样式全屏)...这种模式的显示没有太大问题,但因为是通过css控制的页面dom显示,对于原生的空间不能很好的控制,如系统的键盘 ?

    10.9K151

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

    hideSoftInputFromWindow(binding.etChat.windowToken, 0) } 复制代码 在DialogFragment显示时弹出软键盘 在DialogFragment...显示时有两种方式弹出软键盘: 1、在onViewCreated中发送一个延时任务 etChat.postDelayed({ showSoftInput() }, 200) 复制代码 注意:如果直接调用显示键盘不会起作用...,因为这个时候view没有显示出来 2、设置dialog的style属性 android:windowSoftInputMode 的值,发现是我 DialogFragment 依附的 activity的布局控件,可以理解为当前获取焦点的控件,因此可以传入activity中当前焦点所在的view...最后,还有一种方式就是使用全屏dialog,在原先空白区域加一个透明的View,设置view的点击事件去关闭软键盘和弹窗,这样就避免了点击空白处关闭的问题。

    5.2K40

    android刘海屏适配(刘海屏或圆角适配)

    大家好,又见面了,我是你们的朋友全栈君。 安卓P版本也就是刚发布的安卓9.0 其中就加入了刘海屏相关的API。...这样就导致我们不得不去适配安卓P了。 在收到邮件后,查阅谷歌官方的资料,更新SDK。其中UI最大的改变就是需要适配刘海屏。...但是国内厂商为了快速抢占全面屏手机市场,在安卓系统8.1的基础上,硬件就弄出了刘海屏,例如华为nova 3e, oneplus 6, oppo r15, vivo x21,但是系统支持没有更上,没有一个统一的...如图: 第二张图就是开启模拟选项后显示的切口样式,当然这个缺口是模拟的,目前真机普遍的刘海屏高度在90px左右,安卓模拟器模拟的刘海屏高度为144px。...因为我们的闪屏页一般都是会全屏显示,那我们就需要适配刘海屏上的全屏样式了。 坐好了,我开始吹一波了。

    2.2K10

    H5直播避坑指南

    面对着产品同学不断的询问:为什么h5的体验这么差?为什么不能和app的播放体验保持一致?我们对着h5不明确的文档和不同浏览器的怪异表现欲哭无泪。...页面内联播放问题 在iOS Safari和一些安卓的一些浏览器下播放视频的时候,不能在h5页面中播放视频,系统会自动接管视频 如果需要在h5页面内播放视频,需要在视频标签上加上 webkit-playsinline...视频的高度问题 在安卓下,一些浏览器如QQ浏览器和UC浏览器,系统会把视频的层级调到最高,所以如果想在页面上显示dom元素,都会被视频盖住,单纯的设置该dom的z-index是无效的,如图所示 [1498530055801...但是在测试中发现,一些安卓机不支持该属性,如小米手机,所以需要在调用的时候进行一下判断 var player = $('#player')[0];if (player.webkitSupportsFullscreen...这种模式的显示没有太大问题,但因为是通过css控制的页面dom显示,对于原生的空间不能很好的控制,如系统的键盘 [1498530770240_8865_1498530770152.png] 在拉起键盘输入弹幕的时候

    5.5K130

    H5 直播避坑指南

    页面内联播放问题 在iOS Safari和一些安卓的一些浏览器下播放视频的时候,不能在h5页面中播放视频,系统会自动接管视频 如果需要在h5页面内播放视频,需要在视频标签上加上 webkit-playsinline...视频的高度问题 在安卓下,一些浏览器如QQ浏览器和UC浏览器,系统会把视频的层级调到最高,所以如果想在页面上显示dom元素,都会被视频盖住,单纯的设置该dom的z-index是无效的,如图所示 ?...但是在测试中发现,一些安卓机不支持该属性,如小米手机,所以需要在调用的时候进行一下判断 var player = $('#player')[0];if (player.webkitSupportsFullscreen...这种接管的后果是这时的我们是没有办法控制视频的播放,也没有办法在上面浮动我们的dom元素,如弹幕,礼物这些,会完全被视频盖在下面,所以我们的目标即是解决这种系统接管的问题 3)使用伪全屏(样式全屏)...这种模式的显示没有太大问题,但因为是通过css控制的页面dom显示,对于原生的空间不能很好的控制,如系统的键盘 ?

    2.9K90

    Android 必知必会 - DialogFragment 使用总结

    扩展阅读:Dialog 在屏幕翻转时的处理 无标题栏/全屏 在基本用法里代码注释有设置主题的地方,下面详细说下两种方法下设置无标题栏和实现全屏的方式: 无标题栏 对于方法 ① : @Override public...Android 源码的说明 */ setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog); } 实现全屏(宽/高度全屏...应用场景区别 文章一开始简单总结了方法 ① 和方法 ② 的应用场景,这里说明下: 从基本的用法中可以看到方法 ① 为简单的替代 Dialog 提供了非常方便的创建方式,比方法 ② 有优势 方法 ① 在使用了多线程...方法 ② 则没有此问题,而且,其创建方式默认使用了自定义 View,更便于应对复杂 UI 的场景。...扩展阅读: 详细解读 DialogFragment Android Dialog/DialogFragment宽度高度修改/全屏,自定义样式 Full Screen DialogFragment in

    4.3K31

    走进安卓的重灾区----video

    html5的video已经出来很久了。在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差。这几天搞了安卓的兼容,简直是要吐血。所以特意总结了一些强势的坑点。...坑(本次主要是在微信X5浏览器中的测试,其他安卓浏览器下表现不一定一致) 自动播放 在ios上会自动全屏播放,需要在video标签上设置一个属性 webkit-playsinline,ios10及以上版本属性名改成...安卓上,无法自动播放,必须手动触发视频的播放。调用任何方法都没用,据说这个为了帮用户省流量而设定的。但是安卓在首次触发之后,再次触发可以通过调用 .play 来触发播放视频。...因此做兼容的时候可以设一个判断是否首次播放的标志来处理。 默认样式 安卓下,不能自动播放,因此视频在播放前会带有视频的默认白色加圆圈播放按钮且背景是纯黑色,可以说是非常丑陋了。...但是这样的体验可以说是非常糟糕了。于是这种情况下,必须舍弃设置全屏播放了,但是在X5浏览器非全屏播放模式下,安卓会在视频页面右上角自动生成一个全屏按钮,这个怎么都去不掉。

    1.6K00

    这个月被「视频播放」坑惨了,曝光八大坑

    工作压力大,听一首江南缓解下情绪~ 前言 大家肯定会很奇怪我为什么要写前端的东西?因为我是一名全栈攻城狮,是不是该贡献点前端的实战经验?...安卓在同层渲染下生效,支持 DLNA 协议;iOS 支持 AirPlay 和 DLNA 协议;默认为 false。...经测试该属性对 ios 手机有效,安卓手机无效。...该接口的使用示例如下: 2.4 全屏横屏播放 在前面学习属性的时候,我们知道 enable-auto-rotation 可以实现手机横屏全屏的效果,但是这个属性对安卓手机无效,所以放弃了使用这个属性,...enable-auto-rotation: 使用该属性时,要注意该属性对安卓机无效。因为自己用的 ios 的手机,折腾了很久才发现这个问题。最后使用 api 实现的全屏播放功能。

    2K10

    Android6.0到9.0的适配爬坑总结

    2.安卓6.0的适配 2.1 怎么适配 ● 在6.0所有权限都需要申请?...的适配 3.1 应用间共享文件   在targetSdkVersion大于等于的24的App中,但是我们没有去适配7.0。...1)只勾选v1签名就是传统方案签署,但是在7.0上不会使用V2安全的验证方式。 2)只勾选V2签名7.0以下会显示未安装,7.0上则会使用了V2安全的验证方式。...4.1 安卓8.0中PHONE权限组新增两个权限 ANSWER_PHONE_CALLS:允许您的应用通过编程方式接听呼入电话。...4.2 通知适配   安卓8.0中,为了更好的管制通知的提醒,不想一些不重要的通知打扰用户,新增了通知渠道,用户可以根据渠道来屏蔽一些不想要的通知 兼容的代码 /** * 安卓8。

    2K30

    安卓锁屏不到2分钟被破解,仅需换一张SIM卡

    例如有网友试了试开源安卓系统LineageOS(刷机党常用系统),就发现同样“中招了”: 还有网友在自己的Android12系统上试了下这种破解方式,“it works”!...小哥和谷歌的完整对话链接附在文末了,感兴趣的伙伴可以自行查看。(手动狗头) 究竟为什么会出现这样的漏洞? 现在,谷歌的安卓工程师们终于把这个漏洞给补上了。...△栈原理 这时候,如果使用SIM卡自带的PUK密码,就能通过一个叫“PUK重置组件”的模块调用.dismiss()函数,将手机锁定解除,并继续显示栈下面的其他屏幕解锁操作,在小哥的案例中是指纹锁屏。...还有网友发现三星手机也“逃过一劫”: 现在,安卓工程师们重构了.dismiss()函数,简单来说就是给它打个小小的补丁,让它只能解锁带有“SimPuk”标记的安全屏幕(也就是只能解除手机锁定屏幕)。...小哥本人对此没有异议,但也有网友认为,这不是这次漏洞的最优解: 永远不要假设任何bug都只有一种特殊情况。如果不解决代码的根本逻辑,灾难就一直存在。 你的安卓手机中出现了这个bug吗?

    1.2K30

    复杂帧动画之移动端video采坑实现

    在 video 标签中,只要不加 controls 属性,一般是不会显示控制条的,这样就看不出来是一个视频了,当然有些安卓机器的浏览器的确处于一种失控状态,后面会提到 ○| ̄|_ IOS 视频自动全屏播放...在华为荣耀 8 的微信里面,我发现了个诡异的问题,视频没有播放,同时 video.play 没有 catch 到 error,而是正常的执行到了 then 方法,也就是说 play 方法返回成功,然而视频实际没有播放...无奈之下, 针对安卓的微信端,视频全部启用兼容模式 论安卓浏览器的各种诡异表现 oppo 机视频播放自动悬浮置顶 video 控制条无法隐藏 视频无法控制地自动全屏播放 ......设计: "那就先对所有的安卓都使用兼容模式吧,后面对此优化 于是就这样干掉了所有的安卓 video ios QQ 浏览器视频播放完毕,展示推荐视频 ?...,尤其安卓,一些浏览器对 video 标签进行拦截,并以自己的方式实现,或是悬浮置顶播放,或是两个视屏播放冲突,或是控制条无法隐藏,或是播放默认全屏,如果用其它方式可以实现动画尽量还是用其它方式 对于

    2.4K10

    还未成为优秀的安卓工程师,是差在时代还是败在机遇?看了这份进阶指南后,我茅塞顿开

    后记 希望你能对照上面的知识图谱,彼此印证查缺补漏,不断在技术道路上前行。 对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。...整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。 想要拿高薪实现技术提升薪水得到质的飞跃。...另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。 2、进行系统梳理知识,提升储备 客户端开发的知识点就那么多,面试问来问去还是那么点东西。...所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。...关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。 以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。

    40710

    华为EMUI多窗口模式适配指南

    1.2 智慧分屏创新点 华为智慧分屏,在安卓原生的分屏功能基础上,进行了一系列的优化: (1)收编原有分屏入口,提供统一的多窗口启动入口,可快速完成应用的窗口化启动; (2)为IM类应用消息通知提供悬浮窗入口...2.1 如何声明支持多窗口 华为智慧分屏多窗口适配方法与安卓原生多窗口适配策略相同,在 或 节点中添加声明,启用多窗口显示,即可加入到侧边栏dock列表中..."] 安卓官方多窗口适配参考链接: https://developer.android.com/guide/topics/ui/multi-window.html 2.2 正确使用应用资源 开发者在适配多窗口模式时...如果在悬浮窗下使用的是 Application Context处理UI 相关的事情,会导致加载的资源无法感知到多窗口而显示异常,而使用Activity Context在全屏模式和投屏等模式下依然可以正常显示...在华为智慧分屏或者多窗口模式下,在应用顶部有一个功能bar,因此应用在布局时,需要调用安卓原生的WindowInsetsListener接口在顶部预留一定的空间,注意不要使用固定高度。

    1.6K30

    H5活动宣传页通用布局技术解决方案

    本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 一般来说,活动宣传页都是全屏的滑动,而移动端的视窗大小确实是有点零碎化,于是将内容在不同的手机上良好展示出现就显得有点挑战了...根据caniuse的兼容报告,有以下两点需要注意: 安卓4.3- 不支持将background-size缩写进background,所以必须单独申明这个样式 安卓4.3-不支持background-size...= 0.563 iPhone 6 375 ÷ 667 = 0.562 iPhone 6 Plus 414 ÷ 736 = 0.5625 安卓:360 ÷ 640 = 0.5625 所以背景图的设计宽高比最好是...发光地球水平铺满 这里将采用图片宽高比的方法来解决这个问题,可以参考我之前的文章: css中如何做到容器按比例缩放 移动端重构实战系列6——icon与图片 核心思想还是利用padding的百分比单位计算是基于元素的宽度...视窗高度的百分比 如果你的某个元素的定位或大小是基于视窗的高度来计算的,这就有点麻烦了,尤其是嵌套了好几层的情况。 css3提供了一个v系列的单位,其中vh就表示视窗的高度,但是安卓4.3-不支持。

    1.7K50
    领券