xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Android刘海屏适配方案,最全Android刘海屏适配方案

来源:http://www.ccidsi.com 作者:集成介绍 人气:195 发布时间:2020-03-15
摘要:Android全面屏的无绳电话机更是多了,要最早思谋动用适配周全屏的标题了,查了查相关文章,总括一下. 乘势三星 X公布,本国部分厂家也临盆了刘海屏手提式有线电话机,将在公布的Androidp也

Android全面屏的无绳电话机更是多了,要最早思谋动用适配周全屏的标题了,查了查相关文章,总括一下.

乘势三星 X公布,本国部分厂家也临盆了刘海屏手提式有线电话机,将在公布的Android p也提供了对刘海屏的支撑。so,大家的app也要超前做好适配。

图片 1image

注脚最大显示器宽高比

图片 2图片 3Declare a maximum aspect ratio.png以上海体育场合片来自谷歌(GoogleState of QatarDeveloper通过文书档案能够见见从Android7.0起始,应用的多窗口方式暗中认可变为运维,在多窗口情势下,暗中认可已经开展了一揽子屏适配,假如大家不想利用在多窗口形式下运维,能够改进以下属性:

android:resizeableActivity="false"

那个时候,大家得以手动举行设置最大显示器宽高比:android8.0及以上:

<activity android:maxAspectRatio="2.4"> ...</activity>

android7.1及以下版本:

<meta-data android:name="android.max_aspect" android:value="2.4" />

内需当心的是,若是手动举办安装了最大宽高比,必需求将多窗口情势设置为false,否则不生效.

怎么着是刘海屏?

荧屏的正上方居中地点会被挖掉一个孔,显示器被挖掉的区域不或许平日突显内容,那类别型的显示屏就是刘海屏,也是有别的叫法:挖孔屏、凹凸屏等等,这里统一按刘海屏命名。

图片 4OPPO R15.png

时下国内厂家已经分娩的刘海屏Android手提式有线电话机有SamsungP20 pro, One plus X21,三星(Samsung卡塔尔(قطر‎奥迪Q315。

刘海屏指的是手提式有线电电话机荧屏上方由于追求十二万分边框而使用的方案,展现为在顶端有块清水蓝遮挡,长得像刘海,所以叫刘海屏。

刘海屏

刘海屏适配分为全屏已适配刘海屏,全屏未适配刘海屏和非全屏页面,

一旦未有适配刘海屏会有怎样后果?

下文一:导航栏中title被遮挡

图片 5未适配刘海屏1

结果二:展现内容下移,底部现身黑条,尾巴部分现身遮挡

图片 6未适配刘海屏2

现阶段google在Android P寒医林纂要对刘海屏的适配进行了联合,所以在targetApi >= 28上能够运用Google官方推荐的适配方案张开刘海屏适配。不过在Android O版本的刘海屏怎么着适配呢?那便是本文要器重阐释的内容了:

非全屏页面

非全屏页面即有状态栏展现的页面,结束近日,基本上全部的刘海都只设有于状态栏,所以非全屏页面无需大家进行适配,系统会自动举行适配.

图片 7非周到屏

因为刘海也是紫藤色的,所以看上去未有效果.

怎么样适配刘海屏?

由于Android p正式版后天刚公布, 当前市道上的Android 刘海屏手提式有线电话机还没办法用Android 官方提供的方案来缓和,那怎么做吧?还或多或少个厂商本身交到了适配方案。我们先讲理论后上代码,假设您只想要代码就一赞佩下翻:

1、对国内四大厂家(华为、OPPO、HTC、VIVO)对Android O 版本刘海屏的适配方案张开介绍;2、对Android P版本的刘海屏举办适配;3、提议对Android O 版本刘海屏的通用解决方案,包含全屏占用刘海屏、全屏不占用刘海屏二种景况;4、提议适配工具NotchTools施工方案,让您的运用轻巧高效的适配周全屏

全屏未适配刘海屏页面

全屏界面未适配刘海时,无法接受刘海区域,所以会不由自主出图所示效果,严重时可能会将尾巴部分控件顶下去,为驾驭决这些标题,须要对其进展适配

图片 8全屏未适配刘海屏页面

华为P20 pro

中兴刘海屏适配官方文书档案黑莓付出的文书档案最为详实,P20 pro预装系统对未做刘海屏适配管理的app有早晚管理,管理逻辑如下

图片 9预管理流程图可以预知,会被One plus系统做偏移管理的有2种状态:1.未安装meta-data值,页面横屏状态2.未设置meta-data值,页面竖屏状态,不显得状态栏那2种景况都会冒出后果二。假若您的app中页面没有那二种意况,比如都以竖屏且展现状态栏,你就足以淡定地不做处理。今后我们领略原因了就能够因时制宜了,这里给出作者引入的解决方案(官方给出的缓和方案不断一种,能够遵照本人的必要运用State of Qatar分为4步:1.配置meta-data<meta-data android:name="android.notch_support" android:value="true"/>①对Application生效,意味着该选拔的享有页面,系统都不会做竖屏场景的特殊下移也许是横屏场景的右移特殊处理:图片 10配置在application下

② 对Activity生效,意味着能够针对单个页面进行刘海屏适配,设置了该属性的Activity系统将不会做极度管理:

图片 11配置在Activity下

2.检测是或不是存在刘海屏

public static boolean hasNotchInScreen(Context context) { boolean ret = false; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen"); ret =  get.invoke(HwNotchSizeUtil); } catch (ClassNotFoundException e) { Log.e("test", "hasNotchInScreen ClassNotFoundException"); } catch (NoSuchMethodException e) { Log.e("test", "hasNotchInScreen NoSuchMethodException"); } catch (Exception e) { Log.e("test", "hasNotchInScreen Exception"); } finally { return ret; }}

3.得到刘海屏的参数

public static int[] getNotchSize(Context context) { int[] ret = new int[]{0, 0}; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("getNotchSize"); ret =  get.invoke(HwNotchSizeUtil); } catch (ClassNotFoundException e) { Log.e("test", "getNotchSize ClassNotFoundException"); } catch (NoSuchMethodException e) { Log.e("test", "getNotchSize NoSuchMethodException"); } catch (Exception e) { Log.e("test", "getNotchSize Exception"); } finally { return ret; }}

4. UI适配对的,第1步仅仅是报告EMUI系统不要瞎操作你的页面,真正适配的活还要你自身干。①确定是不是刘海屏,代码上边给出了②假若是刘海屏手提式有线电话机须求运用自身调度布局避开刘海区,布局原则:保险入眼的文字、图片和录制新闻、可点击的控件和Logo还应该有使用弹窗等等构造提出呈现在景况栏区域以下;不重大,遮挡不会现出难点的构造能够拉开到状态栏区域显示,遵照这种结构原则改善,能够壹回修正就能够适配全部的刘海屏手提式有线电电话机:

图片 12UI适配

因为比较日平常规手提式有线电话机来说,刘海屏顶上部分中间会鼓起一块刘海区域,所以会在给Actiivty设置全屏Flag的时候有一对例外。本文所涉嫌到的刘海屏适配都以在给Activity的window设置SYSTEM_UI_FLAG_FULLSCREEN前提下的,在展现状态栏的状态下(不管是情状栏透明或然不透明),不是本文切磋的中央,我们的所说的刘海屏适配只是本着全屏沉浸式的情景下。

全屏适配刘海屏页面

经过查阅WindowManager的源码能够观望共有3种呈现情势,:

 //默认情况,全屏页面不可用刘海区域,非全屏页面可以进行使用 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0; //不允许使用刘海区域 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2; //允许页面延伸到刘海区域 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1;

法定对此那三种方式的演说:

图片 13image.png

通过查看上边包车型大巴文书档案,则能够开展全屏分界面包车型地铁适配:

 var lp = window.attributes lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES window.attributes = lp

图片 14全屏适配刘海屏页面

vivo & OPPO

中兴刘海屏适配官方文书档案One plus刘海屏适配官方文书档案

OPPO 和 小米官方网站仅仅给出了适配教导,未有付诸具体方案,轻便计算为:如有是享有刘海屏的手提式无线电话机,竖屏突显状态栏,横屏不要在虎口呈现首要音讯仍然设置点击事件。那怎么知道是或不是刘海屏手提式有线电电话机吗?摩Toro拉推断情势:

public static boolean hasNotchInOppo(Context context){ return context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");}

摩托罗拉的剖断方式:

public static final int NOTCH_IN_SCREEN_VOIO=0x00000020;//是否有凹槽public static final int ROUNDED_IN_SCREEN_VOIO=0x00000008;//是否有圆角public static boolean hasNotchInScreenAtVoio(Context context){ boolean ret = false; try { ClassLoader cl = context.getClassLoader(); Class FtFeature = cl.loadClass("com.util.FtFeature"); Method get = FtFeature.getMethod("isFeatureSupport",int.class); ret =  get.invoke(FtFeature,NOTCH_IN_SCREEN_VOIO); } catch (ClassNotFoundException e) { Log.e("test", "hasNotchInScreen ClassNotFoundException"); } catch (NoSuchMethodException e) { Log.e("test", "hasNotchInScreen NoSuchMethodException"); } catch (Exception e) { Log.e("test", "hasNotchInScreen Exception"); } finally { return ret; }}

比方图一是在华为 Tiguan15上边世的title被挡住,呈现状态栏后显示效果如下:

图片 15体现状态栏后

在设置SYSTEM_UI_FLAG_FULLSCREEN了Flag后,国内商家的刘海屏手提式有线电话机对于此表现的私下认可展现效果都以有异样的,具体为:1、OPPO手提式有线电话机默许是全屏可是不占用刘海区域;2、国产手提式有线话机私下认可是全屏不过不占用刘海区域;3、oppo手提式有线电话机暗中认可是全屏且占用刘海区域,可在装置里独自给APP设置是还是不是隐身刘海;4、华为手机暗许是全屏且占用刘海区域,可在安装里独自给应用软件设置是不是隐身刘海;

如上方案是谷歌官方的适配方案,部分厂家并未有选取此方案,而是选用本身API举办完美屏适配,详细情况能够查看各手提式有线话机商家官方文书档案.

OPPO:

如上所讲的是各商家提供的缓和方案, 那么google官方对刘海屏做了何等的支撑呢?

google官方刘海屏适配方案google从Android P初阶为刘海屏提供扶持,近期提供了二个类和三种方式:一个类The new DisplayCutout class lets you find out the location and shape of the non-functional areas where content shouldn't be displayed. To determine the existence and placement of these cutout areas, use thegetDisplayCutout() method就是说能够用DisplayCutout那几个类寻找刘海的岗位和形状,调用getDisplayCutout(卡塔尔国这些情势能够拿走刘海的职分和区域,大家看看这些类提供了怎么样措施:

图片 16DisplayCutout提供的方法.png所以大家可用那个类决断是或不是有刘海的留存以致刘海的地点

DisplayCutout cutout = mContext.getDisplayCutout();

三种方式A new window layout attribute, layoutInDisplayCutoutMode, allows your app to lay out its content around a device's cutouts. You can set this attribute to one of the following values:

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER率先种方式:LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT : 仅仅当系统提供的bar完全包蕴了刘海区时才同意window增到刘海区,不然window不会和刘海区重叠第三种格局:LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES :允许window扩张到刘海区(最先的小说说的是短边的刘海区, 这段日子有刘海的手机都在短边,所以就不纠缠了State of Qatar第三种情势:LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVEPAJERO: 分化意window增至刘海区

咱俩得以设置是或不是同意window扩展到刘海区

WindowManager.LayoutParams lp =getWindow().getAttributes(); lp.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; getWindow().setAttributes;

比如三个有状态栏的页面, 我们得以那样适配:

DisplayCutout cutout = getDisplayCutout();if(cutout != null){ WindowManager.LayoutParams lp =getWindow().getAttributes(); lp.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; getWindow().setAttributes;}

倘使以为有赞助, 点个赞再走可好啊~

备注:通过试验及查阅文书档案件发生掘,Moto平岳大和BlackBerry适配方案是看似的且适配方案成熟,oppo、和BlackBerry的适配介绍是相似的,且基本无适配方案。Moto波多野结衣、华为会分别对全屏占用刘海、全屏不占用刘海两种境况分别提供了点子。而oppo、One plus只提供了是还是不是有刘海这么些七个方法,并未提供适配方案。

结尾

以此电影不错,固然有些佛口蛇心 = =

图片 1720180625174019.png

据此大家再全屏的图景下须要对四大商家做下适配,不然有不小恐怕三个App在分化手提式有线电话机上显现分化、或然会对UI做了截断,影响使用体验:

图片 18攻下刘海彰显的刘海屏图片 19未占用刘海展现的刘海屏

Android O的刘海屏适配方案可分为三种情景:

对此须求全屏且占用刘海屏展现的景况,如沉浸式游戏、沉浸式阅读,适配时能够应用如下步骤:1、在Activity中利用setSystemUiVisibility设置全屏的局地标志;2、依据差别厂家的适配准绳设置差别的flag,来让App全屏沉浸式突显;3、依照商家提供的Api,获取刘海的莫斯中国科学技术大学学,来调度一些View的间隔,达到适配目标。

这种适配方案平日接收如下步骤:1、去各大手提式有线电话机厂家官方网站找到呼应的全屏但不占用刘海的方案,近些日子只有HTC、中兴提供了具体方法来设置是不是占用刘海区域,oppo和One plus只提供了机型是或不是是刘海屏手提式有线电话机的法子,但未提供适配方案;2、摩Toro拉和索爱皆有切实方案来适配全屏不占用刘海的气象,这里最主要对小米和oppo进行适配。这里要评释下,在系统设置里能够设置刘海是不是隐身,可是Moto小宫有纱、黑莓是全局设置,而ov是能够独立对app进行设置,又因为ov未有提供切实的适配方案,所以对于ov的全屏适配达不到宏观的适配,在不占用刘海时最上端会留出一块黑边。

图片 20国产手提式无线电话机刘海屏适配方案

本文由68399皇家赌场发布于集成介绍,转载请注明出处:Android刘海屏适配方案,最全Android刘海屏适配方案

关键词: 68399皇家赌场 Android 异形 屏适配 配方

最火资讯