当前位置: 首页 > news >正文

解决魅族17横屏全屏会有白边问题

问题描述:魅族17横屏显示时,右侧导航栏会出现白色

 

在Android P版本中,通过DisplayCutout 类,可以确定非功能区域(刘海屏)的位置和形状

使用layoutInDisplayCutoutMode来进行适配,他的作用是在有刘海屏的时候,如何布局窗口,默认为LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT,他有以下几种模式

LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT:默认情况下,全屏窗口不会使用到刘海区域,非全屏窗口可正常使用刘海区域
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER:窗口不允许和刘海屏重叠
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES:the window is always allowed to extend into the DisplayCutout areas on the short edges of the screen

原因分析:1,没有做Android P 系统的齐刘海适配,导致 右侧导航栏会出现白色。 

                  2,Android系统默认的layoutInDisplayCutoutMode 是WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT会导致魅族17右侧导航栏会变白。

提示:这里填写问题的分析:
例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。


解决方案:

第一步,将导航栏隐藏,让横屏右侧的导航栏消失;将Activity改成全屏显示;

在AndroidManifest.xml清单文件里Activity添加theme

android:theme="@style/MyTranslucentTheme"

style的样式:

</style><style name="MyTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="android:windowTranslucentStatus">true</item><item name="android:windowTranslucentNavigation">false</item><item name="android:statusBarColor">@android:color/transparent</item>
</style>

这样就可以让Activity的顶部导航栏消失:

第二步,Activity的onCreate()方法里添加设置layoutInDisplayCutoutMode,一直允许和刘海屏重叠:

 

WindowManager.LayoutParams lp = this.getWindow().getAttributes();

lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;

this.getWindow().setAttributes(lp);

第三步,按钮适配刘海屏:

不能在刘海屏区域内部放控件吧,所以这个时候我们就要计算状态栏高度了,在布局时候,要刻意避开这个区域:

适配刘海屏详情可参考yi_master的这个链接:https://blog.csdn.net/yi_master/article/details/80309757

第四步,切换成竖屏怎么显示出顶部的导航栏:

思路:获取状态栏高度,因为顶部的导航栏的字体是白色的,可以在布局的顶部添加一个view,view高度为状态栏高度,view的背景为状态栏的背景颜色,就可以出现显示状态的效果;

//获取状态栏高度

public int getStatusBarHeight(Context context) {

int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height","dimen", "android");

if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); }

Log.d("hwj","**getStatusBarHeight**" + result); return result;

}

 

 

 

提示:这里填写该问题的具体解决方案:
例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。


http://www.taodudu.cc/news/show-6112620.html

相关文章:

  • php户型图识别,五大指标教你看懂户型图
  • php户型图识别,5分钟教你马上看懂户型图
  • 户型平面原型设计-简介
  • 懂户型图 如何选择好户型
  • php户型图识别,户型图上的那些标注都是啥?看不懂难怪被坑
  • 推荐一款过滤百度广告的神器
  • 保存网页内容 自动过滤广告和网页头尾
  • chrome去广告插件
  • 可以过滤网页中广告的插件Adblock Plus
  • 实验室常见的PFA制品有哪些?这些特氟龙PFA产品你认得全吗?
  • 我對這個世界的認識
  • 使用Typora列表嵌套列表,回车无法返回上一级列表的状态
  • 解决 Jupyter notebook 运行SHELL 命令(!xxx), 出错: OSError: “/bin/bach“ shell not found
  • 解决Tomcat修改server.xml和content.xml后自动还原问题
  • 十分钟文档化你的C++代码——DoxyGen
  • 我都认识
  • 认清自己
  • 大人物只认得大人物……
  • 我的认识
  • 写个神经网络,让她认得我`(๑•ᴗ•๑)(Tensorflow,opencv,dlib,cnn,人脸识别)
  • 我是这么认为的
  • 我认得embdedding
  • 我觉得,我认为。。。
  • 我认了
  • 视频原理和FFmpeg
  • 这篇文章教给你图片怎么去雾的几个方法
  • 初探视频原理和FFmpeg
  • 《FFmpeg从入门到精通》读书笔记(五)
  • JAVA验证 手机、邮箱、电话、QQ 格式是否正确
  • 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确 要求:长度不能超过15,@前面不能用字母 正确格式2156636@qq.com