详解Android华为凹口屏适配小结

  

Android8.0以后【凹口屏】得到迅速发展,目前已有了挖孔屏/水滴屏/刘海屏等各式各样的屏幕,究其根本依旧是【凹口屏,单华为一个品牌就涵盖了基本所有类型,而对于屏幕适配也是不可逃避的问题。小菜单独对华为各型号屏幕进行适配尝试,部分方法可通用到其他品牌设备,为Android <强> 强标准<强> SDK 强方法。

  

其实凹口屏已经出现很久了,对于获取凹口宽高的方式也有很多种,但是以前主流的凹口屏中凹口位置一般是位于屏幕正上方,但随着发展,也出现了在左上角的挖孔屏样式。相应的,<强> Android 9.0 即<强> SDK28 强也发布了获取凹口屏的方法。

  

  

对华为设备凹口屏适配情况来说,若仅需获取凹口位置的宽高,如下方法即可,在Android <强> 各版本中均可(<强> Android 9.0 强及以上亦可)。此时获取屏幕水平方向安全位置时,可根据屏幕宽度——凹口宽度再左右均分即可。

     /* *   *华为凹口屏判断方法Android各版本均可   * @param上下文   * @return   */公共静态布尔hasNotchInScreen(上下文语境){   布尔ret=false;   尝试{   类加载器cl=context.getClassLoader ();   类HwNotchSizeUtil=cl.loadClass (“com.huawei.android.util.HwNotchSizeUtil”);   方法得到=HwNotchSizeUtil.getMethod (“hasNotchInScreen”);   ret=(布尔)get.invoke (HwNotchSizeUtil);   }捕捉(ClassNotFoundException e) {   日志。e(标签,“hasNotchInScreen ClassNotFoundException”);   }捕捉(NoSuchMethodException e) {   日志。e(标签,“hasNotchInScreen NoSuchMethodException”);   }捕捉(异常e) {   日志。e(标签,“hasNotchInScreen例外”);   最后}{   返回受潮湿腐烂;   }   }/* *   *华为凹口屏宽高获取方式int[]{宽度、高度}   * @param上下文   * @return   */公共静态int [] getNotchSize(上下文语境){   int [] ret=new int [] {0};   尝试{   类加载器cl=context.getClassLoader ();   类HwNotchSizeUtil=cl.loadClass (“com.huawei.android.util.HwNotchSizeUtil”);   方法得到=HwNotchSizeUtil.getMethod (“getNotchSize”);   ret=(int []) get.invoke (HwNotchSizeUtil);   }捕捉(ClassNotFoundException e) {   日志。e(标签,“getNotchSize ClassNotFoundException”);   }捕捉(NoSuchMethodException e) {   日志。e(标签,“getNotchSize NoSuchMethodException”);   }捕捉(异常e) {   日志。e(标签,“getNotchSize例外”);   最后}{   notchWidth=ret [0];   notchHeight=ret [1];   返回受潮湿腐烂;   }   }      

详解Android华为凹口屏适配小结”>,</p>
  <p> <img src=   & lt;元数据android: name=" android。notch_support“android:价值=" https://www.yisu.com/zixun/true "/祝辞      

根据如下方法获取相应参数;

        如果(android.os.Build.VERSION。SDK_INT祝辞=Build.VERSION_CODES.P) {   getSupportActionBar () hide ();   .getDecorView getWindow () ()   .setSystemUiVisibility(视图。SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//设置页面全屏显示   WindowManager。.getAttributes LayoutParams lp=getWindow () ();   lp。layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;//设置页面延伸到凹口区显示   getWindow () .setAttributes (lp);   .getDecorView getWindow () ()   .findViewById (android.R.id.content)   .getRootView ()   .setOnApplyWindowInsetsListener(新View.OnApplyWindowInsetsListener () {   @Override   公共WindowInsets alt="详解Android华为凹口屏适配小结”>,

  

详解Android华为凹口屏适配小结”>,<h2 class=详解Android华为凹口屏适配小结