Android开发 - 设置DialogFragment全屏显示

Android开发 - 设置DialogFragment全屏显示,第1张

默认的DialogFragment并不是全屏,但有些需求需要我们将对话框设置为全屏(内容全屏),Android并没有提供直接的API,通过其它不同的方法设置全屏在不同的机型上总有一些诡异的问题,经过测试,下面的方法可以实现各个机型的全屏。

测试 SDK Version = 28

覆写Fragment的onStart()方法:

上面的方法可以成功设置Dialog为全屏,但是如果在全屏的Dialog顶部有View的情况下,在某些机型View会被状态栏遮住(比如三星S9),这时需要一些特殊的设置来处理,可以参考我的文章: 解决DialogFragment在全屏时View被状态栏遮住的问题

本文原始地址 ,如有更多疑问,请参考我的其它Android相关博客: 我的博客地址

项目中,只允许一个界面在横屏的时候,显示是全屏的,竖屏切换回来的时候又需要显示状态栏,所以需要监听横竖屏的状态,还要修改状态栏的隐藏与显示,如下代码:

[java] view plain copy print?

/**

* 添加横竖屏监听,隐藏图形的菜单控件,2015年11月12日10:15:00:qiulinhe

*/

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig)

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

// // 设置全屏

WindowManager.LayoutParams lp = getActivity().getWindow()

.getAttributes()

lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN

getActivity().getWindow().setAttributes(lp)

getActivity().getWindow().addFlags(

WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

pricemenu.setVisibility(View.VISIBLE)

chart_btn.setVisibility(View.GONE)

user_status_bar.setVisibility(View.GONE)

// chart_btn.setVisibility(View.VISIBLE)

由于产品需求 , 要将一级页面的5个Fragment设置不一样颜色的状态栏然后我对着网上的博文抄了一遍 ,发现兼容问题很差 , 要么就是顶部的状态栏没有实现全屏 , 要么就是底部的虚拟按钮遮挡导航栏(华为手机和小米手机), 最后自定义主题和设置xml布局顶部高度来解决了这个问题

解决方案:

第一步.在values的styles中自定义主题:

第二步.创建values-v19文件夹和styles.xml:

第三步.创建values-v21文件夹和styles.xml:

第三步.引用主题:

第四步.Fragment 状态栏填充颜色:(如果一节界面的头部是轮播图直接预留20dp的高度)

不设置预留高度,状态栏会和toolbar叠加在一起 (状态栏在toolbar上方)

运行后效果图如下:

轮播图在顶部的时候直接预留状态栏的高度即可:

指定颜色的界面设置多一层有颜色的View:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11338390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存