Android 浅谈适配全面屏、刘海屏、水滴屏

Android 检测手机是否是异形屏,刘海屏,水滴屏,挖孔屏 直接上工具类,复制使用即可: public class NotchUtil { private static final String SP_NAME = "MY_NOTCH_SP";//保存异形屏Name private static final String KEY_IS_NOTCH_SCREEN = "KEY_IS_NOTCH_SCREEN";//是否是异形屏KEY /** * 保存当前手机是否是异形屏 * * @param isNotchS 阅读详情

对刘海屏、水滴屏做适配前,先在此给出一个基本概念:何谓刘海屏?何谓水滴屏?

上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖。

目前国内流行的手机厂商主要有:vivo、oppo、华为、小米。各厂商对刘海屏的适配都大不相同,各自有各自对刘海屏的适配API,具体的适配方法可以阅读相应的官网:

VIVO:https://dev.vivo.com.cn/documentCenter/doc/103

OPPO:https://open.oppomobile.com/wiki/doc#id=10159

小米:https://dev.mi.com/console/doc/detail?pId=1293

华为:https://developer.huawei.com/consumer/cn/devservice/doc/50114?from=timeline

具体的适配方法这里不作一一介绍,按照以上四大厂商官网所给出的适配方法,这里给出四大厂商判断/获取刘海屏的工具类:

/**
 * xiaomi、huawei、vivo、oppo流行机型异型屏判断工具类
 */
public class NotchScreenTool {

    //刘海屏、水滴屏等异型屏支持的Android系统版本:8.0-》全面屏  8.0以上-》刘海屏、水滴屏等异型屏
    public static boolean isNotchSupportVersion(){
        int curApiVersion = Build.VERSION.SDK_INT;
        if(curApiVersion > 26){
            return true;
        }
        return false;
    }

    //获取手机屏幕的旋转角度
    public static int getScreenAngle(Context context){
        return ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
    }

    //检查流行机型是否存在刘海屏
    public static boolean isNotch(Context context){
        return isNotch_VIVO(context) || isNotch_OPPO(context) || isNotch_HUAWEI(context) || isNotch_XIAOMI(context);
    }

    //检查vivo是否存在刘海屏、水滴屏等异型屏
    public static boolean isNotch_VIVO(Context context){
        boolean isNotch = false;
        try {
            ClassLoader cl = context.getClassLoader();
            Class cls = cl.loadClass("android.util.FtFeature");
            Method method = cls.getMethod("isFeatureSupport", int.class);
            isNotch = (boolean) method.invoke(cls,0x00000020);//0x00000020:是否有刘海  0x00000008:是否有圆角
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }finally {
            return isNotch;
        }
    }

    //检查oppo是否存在刘海屏、水滴屏等异型屏
    public static boolean isNotch_OPPO(Context context){
        boolean isNotch = false;
        try {
            isNotch = context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            return isNotch;
        }
    }

    //检查huawei是否存在刘海屏、水滴屏等异型屏
    public static boolean isNotch_HUAWEI(Context context) {
        boolean isNotch = false;
        try {
            ClassLoader cl = context.getClassLoader();
            Class cls = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
            Method method = cls.getMethod("hasNotchInScreen");
            isNotch = (boolean) method.invoke(cls);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return isNotch;
        }
    }

    //检查xiaomi是否存在刘海屏、水滴屏等异型屏
    public static boolean isNotch_XIAOMI(Context context){
        boolean isNotch = false;
        try {
            ClassLoader cl = context.getClassLoader();
            Class cls = cl.loadClass("android.os.SystemProperties");
            Method method = cls.getMethod("getInt", String.class, int.class);
            isNotch = ((int) method.invoke(null, "ro.miui.notch", 0) == 1);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }finally {
            return isNotch;
        }
    }

    //获取huawei刘海屏、水滴屏的宽度和高度:int[0]值为刘海宽度 int[1]值为刘海高度
    public static int[] getNotchSize_HUAWEI(Context context) {
        int[] notchSize = new int[]{0, 0};
        try {
            ClassLoader cl = context.getClassLoader();
            Class cls = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
            Method method = cls.getMethod("getNotchSize");
            notchSize = (int[]) method.invoke(cls);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return notchSize;
        }
    }

    //获取xiaomi刘海屏、水滴屏的宽度和高度:int[0]值为刘海宽度 int[1]值为刘海高度
    public static int[] getNotchSize_XIAOMI(Context context){
        int[] notchSize = new int[]{0,0};
        if(isNotch_XIAOMI(context)) {
            int resourceWidthId = context.getResources().getIdentifier("notch_width", "dimen", "android");
            if (resourceWidthId > 0) {
                notchSize[0] = context.getResources().getDimensionPixelSize(resourceWidthId);
            }
            int resourceHeightId = context.getResources().getIdentifier("notch_height", "dimen", "android");
            if (resourceHeightId > 0) {
                notchSize[1] = context.getResources().getDimensionPixelSize(resourceHeightId);
            }
        }
        return notchSize;
    }

    //获取vivo、oppo刘海屏、水滴屏的高度:官方没有给出标准的获取刘海高度的API,由于大多情况是:状态栏≥刘海,因此此处获取刘海高度采用状态栏高度
    public static int getNotchHeight(Context context){
        int notchHeight = 0;
        if(isNotch_VIVO(context) || isNotch_OPPO(context)) {
            //若不想采用状态栏高度作为刘海高度或者可以采用官方给出的刘海固定高度:vivo刘海固定高度:27dp(need dp2px)  oppo刘海固定高度:80px
            int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0) {
                notchHeight = context.getResources().getDimensionPixelSize(resourceId);
            }
        }
        return notchHeight;
    }

    //dp转px
    private int dp2px(Context context,float dpValue){
        float scale=context.getResources().getDisplayMetrics().density;
        return (int)(dpValue*scale+0.5f);
    }
}

若需要对厂商进行判断可以使用:

//判断手机厂商:华为、小米、oppo、vivo
String brand =android.os.Build.BRAND.toLowerCase();
if("huawei".equals(brand)){
    //...
}else if("xiaomi".equals(brand)){
    //...
}else if("vivo".equals(brand)){
    //...
}else if("oppo".equals(brand)){
    //...
}

根据四大厂商官网所提供的适配方案,其中需要在AndroidManifest中添加标签(具体说明请浏览官网):

<!-- 适配全面屏 Android O vivo&oppo-->
<meta-data android:name ="android.max_aspect" android:value ="2.2" />
<!-- 适配刘海屏、水滴屏 Android O 小米 -->
<meta-data android:name="notch.config" android:value="portrait|landscape"/>
<!-- 适配刘海屏、水滴屏 Android O 华为 -->
<meta-data android:name="android.notch_support" android:value="true"/>

在对于Android P的适配中Google给出了统一的方案(基于Android API 28):

1、AndroidManifest中添加标签:

<!--适配刘海屏、水滴屏 Android P -->
<meta-data android:name="android.vendor.full_screen" android:value="true"/>

2、把TargetVersion提到28,miniVersion提到23

3、刘海屏判别方法

在Build.VERSION.SDK_INT >= 28中提供了以下接口:

DisplayCutout类接口:主要用于获取凹口位置和安全区域的位置等。

方法接口说明
getBoundingRects()返回Rects的列表,每个Rects都是显示屏上非功能区域的边界矩形。
getSafeInsetLeft()返回安全区域距离屏幕左边的距离,单位是px。
getSafeInsetRight()  返回安全区域距离屏幕右边的距离,单位是px。
getSafeInsetTop()返回安全区域距离屏幕顶部的距离,单位是px。
getSafeInsetBottom()返回安全区域距离屏幕底部的距离,单位是px。
final View decorView = getWindow().getDecorView();
decorView.post(new Runnable() {
    @Override
    public void run() {
        DisplayCutout displayCutout = decorView.getRootWindowInsets().getDisplayCutout();
        Log.e("TAG", "安全区域距离屏幕左边的距离 SafeInsetLeft:" + displayCutout.getSafeInsetLeft());
        Log.e("TAG", "安全区域距离屏幕右部的距离 SafeInsetRight:" + displayCutout.getSafeInsetRight());
        Log.e("TAG", "安全区域距离屏幕顶部的距离 SafeInsetTop:" + displayCutout.getSafeInsetTop());
        Log.e("TAG", "安全区域距离屏幕底部的距离 SafeInsetBottom:" + displayCutout.getSafeInsetBottom());
        List<Rect> rects = displayCutout.getBoundingRects();
        if (rects == null || rects.size() == 0) {
            Log.e("TAG", "不是刘海屏");
        } else {
            Log.e("TAG", "刘海屏数量:" + rects.size());
            for (Rect rect : rects) {
                Log.e("TAG", "刘海屏区域:" + rect);
            }
        }
     }
 });

Android P中新增了一个布局参数属性layoutInDisplayCutoutMode,包含了三种不同的模式,如下所示:

模式模式说明
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT只有当DisplayCutout完全包含在系统栏中时,才允许窗口延伸到DisplayCutout区域。 否则,窗口布局不与DisplayCutout区域重叠。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER该窗口决不允许与DisplayCutout区域重叠。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES该窗口始终允许延伸到屏幕短边上的DisplayCutout区域。
if ((Build.VERSION.SDK_INT >= 28)) {
    // 使用官方api判断
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
    getWindow().setAttributes(lp);    
    //不显示状态栏             
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    //初始化时先写适配刘海屏的方法,再判断是否有刘海屏
    getCutoutLengthAndroidP(context,window);
    return;
}

 

Android刘海屏、水滴屏全面屏适配详解,android开发权威指南 final View decorView = window.getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); 其中延伸显示区域到刘海的代码,也可以通过修改Activity或应用的style实现,例如: <?xml version="1.0" encoding="utf-8"?> Android 阅读详情

相关推荐

android 刘海屏幕适配

android 刘海屏幕适配

android水滴屏适配webview,沉浸式,状态栏高度,刘海屏怎么开启,怎么适配?看这!...

何为沉浸式?沉浸式就是app的头部和状态栏和何为一体的,webview即为整个手机的高度何为状态栏?状态栏就是手机顶部,显示时间电量那一行除此还有刘海屏,水滴屏,挖孔屏,全面屏,非刘海屏,不同手机状态栏高度又不太一样,需要我们去适配,有一个段子说,如果看到那个手机适配有问题,赶紧把那个手机藏起来,不要让测试发现了。我们用HBuilder创建的应用默认是不开启沉浸式的,需要我们手动如下配置开启。打开...

weixin_34370877的博客 2047

Android-Android刘海屏水滴屏等全面屏适配工具

Android刘海屏、水滴屏等全面屏适配工具

android9.0刘海屏适配

上一篇写完8.0的四大厂商,现在补上9.0的获取刘海屏的方法。 需要把TargetVersion提到28,miniVersion提到23,或者使用反射的方法来获取 1.在Manifest.xml上的application下,添加标签 &lt;meta-data android:name="android.vendor.full_screen" ...

iamZ2z的博客 2650

Frida三层次钩子快速逆向VMP+OLLVM加固APK

VMP(虚拟机保护)和OLLVM(控制流平坦化)是Android应用常见的双重混淆技术,其核心原理是将Java逻辑虚拟化、Native代码控制流打散,从而阻断传统静态分析与简单Hook。但任何混淆都必须在CPU上执行,因此必然暴露JNI注册行为、ABI参数传递规律及系统调用痕迹。基于此,Frida可通过跨层联动——从JNI_OnLoad捕获Native库加载、在VMP解释器入口截获字节码上下文、于关键系统调用(如read/gettimeofday)反向追踪数据流——构建可观测、可复现的动态分析链。该方法无需

weixin_30888413的博客 1002

《小白入门:无人机电调 ESC 的 PWM 接口特性、主流协议与使用指南》

电调是无人机的 “动力中枢”,其 PWM 接口是入门的基础,而 SBUS、DroneCAN 等协议则代表了更高阶的控制方式。小白学习时,需先掌握 PWM 的基本特性和连接方法,再根据场景选择合适的协议,同时严格遵守使用注意事项(如电源匹配、校准步骤、安全操作)。随着实践深入,逐步理解 “协议差异” 和 “系统协同”,才能让无人机更稳定、安全地飞行。

bother3000的博客 3769

【Android 屏幕适配】异形屏适配 ① ( 异形屏类型:刘海屏、水滴屏、挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )

一、异形屏类型:刘海屏、水滴屏、挖孔屏、 二、沉浸式布局刘海屏适配、 三、华为手机异形屏适配注意点、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6294

Vue3 与 Bpmn-js:打造现代化 BPMN 流程设计器

随着业务流程的复杂化,流程设计器成为企业级应用中不可或缺的一部分。BPMN(Business Process Model and Notation)是一种标准的业务流程建模语言,广泛应用于业务流程管理。本文将介绍如何使用 Vue3 和 Bpmn-js 打造一个现代化的 BPMN 流程设计器。

九天的专栏 2117

Android刘海屏、水滴屏全面屏适配方案

我将适配方案整理后,封装成了一个库并上传至github,可参考使用 项目地址: github.com/smarxpan/No… 市面上的屏幕尺寸和全面屏方案五花八门。 这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖。为便于说明,后文提到的「刘海屏」「刘海区」都同时指代上图两种屏幕。 当我们在谈屏幕适配时,我们在谈什么 适应更...

weixin_34368949的博客 3299

飞塔防火墙认证绕过漏洞(CVE-2022-40684)深度剖析与实战复现

本文深度剖析了Fortinet飞塔防火墙高危认证绕过漏洞CVE-2022-40684的原理与影响。该漏洞允许攻击者通过构造包含特定Forwarded头和User-Agent的HTTP请求,无需凭证即可绕过认证,以管理员身份访问设备。文章详细演示了从环境搭建到实战复现,最终植入SSH密钥获取控制权的完整过程,并提供了漏洞挖掘技巧与关键防御建议。

d6e7f8g9h的博客 709

开关电源的纹波和噪声电压-抑制方法

开关电源(包括AC/DC转换器、DC/DC转换器、AC/DC模块和DC/DC模块)与线性电源相比较,最突出的优点是转换效率高,一般可达80%~85%,高的可达90%~97%;其次,开关电源采用高频变压器替代了笨重的工频变压器,不仅重量减轻,体积也减小了,因此应用范围越来越广。 但开关电源的缺点是由于其开关管工作于高频开关状态,输出的纹波和噪声电压较大,一般为输出电压的1%左右(低的为输出电压的0.5%左右),最好产品的纹波和噪声电压也有几十mV;而线性电源的调整管工作于线性状态,无纹波电压,输出的噪声电压也

ltqdxl的博客 1万+

AndroidManifest.xml文件何时被加载?如何查看apk的AndroidManifest

1 何时被加载 首先分析一波,四大组件需要在AndroidManifest文件中配置否则无法使用,类似Activity无法启动, Activity可以被其他应用利用全类名或者action启动,就算此时要启动activity的应用没有被启动呢, 所以AndroidManifest在系统启动时或者应用安装完毕后已经被系统加载。 从系统代码级别解释就是系统启动过程中PMS会扫描特定目录下的apk...

lidongxiu0714 6049

UG二次开发之 三面摆正体代码分析

CIUGUIBlock 是一个从UIBlock 派生的一个类,为什么要从UIBlock 派生出CIUGUIBlock,这是为了兼容低版的UG。如果我们不从的UIBlock 派生控件类对象指针,在UG 8.5以下的版本,会出现编译错误的问题。这是一个简单的入门功能,包括了不少的常用的UF函,下面我们将结合成品代码一起分析一下常用的函数,这对初学者是必要的。根据创建好的UI控件,在 initialize_cb 中创建控件的指针对象。//根据选定的面,指定 X,Y坐标系轴。//根据变换的矩阵,平移实体。

u014657217的博客 351

Android全面屏适配指南

何为全面屏 全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。从字面上解释就是,手机的正面全部都是屏幕,四个边框位置都是采用无边框设计,追求接近100%的屏占比。但受限于目前的技术,还不能做到手机正面屏占比100%的手机。现在业内所说的全面屏手机是指真实屏占比可以达到80%以上,拥有超窄边框设计的手机。 全面屏手机屏幕的宽高比例比较特殊,不再是以前的16:9。比如三星的Galaxy S8屏幕...

xiangzhihong8的专栏 5391

【OpenClaw从入门到精通】第34篇:医疗AI的“Agent OS”时代:基于WiseClaw构建医院专属智能体平台(2026实测版)

2026年医疗AI迈入实战落地新阶段,全球首个医疗OpenClaw平台WiseClaw正式发布,香港中文大学(深圳)医院完成业内首个私有化部署。本文基于真实医疗场景需求与公开技术资料,系统拆解医疗智能体平台的建设逻辑:从医疗Agent OS的五大核心特性切入,详解门诊病历质控、用药审查、医院运行管理三大临床场景的智能体搭建流程,提供完整的私有化部署代码、安全配置方案与实操演示。文章兼顾新手入门与进阶需求,严格遵循医疗合规要求,强调“只读不写+人工复核”原则,所有方案均经过虚拟实测验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 788

10款AI工具赋能虚拟展厅设计:架构师效率提升90%的秘密武器

2020年全球疫情成为数字转型的催化剂,虚拟展厅从"可选项"迅速转变为"必需品"。根据Gartner最新报告,到2025年,超过70%的企业将采用虚拟展厅作为客户体验和产品展示的核心渠道。这一转变不仅是应急措施,更是商业模式的永久性革新。虚拟展厅突破了物理空间的限制——一个精心设计的虚拟展厅可以同时接待来自全球各地的访客,无需考虑场地容量;展品可以以数字形式永久保存,避免了物流和损耗问题;数据分析功能可以精确追踪每位访客的行为轨迹,提供前所未有的洞察。数据透视。

AI 领航者的博客 1573

手机屏分几种?什么叫水滴屏、刘海屏、瀑布屏、全面屏?

手机,因为前置摄像头会占用空间的原因,所以各个手机厂商退而求其次的研发了水滴屏、刘海屏、瀑布屏、挖孔屏、全面屏这些技术,那么下面就来看看如何区分吧! 1、水滴屏 为了给前置摄像头、距离感应器等零部件预留位置,所以在屏幕顶部会留有一个凹口,因为和水滴的大小、形状有些类似,所以手机厂商给它起了水滴屏这么一个好听的名字。 2、刘海屏 从发型方面来说,刘海是指垂在前额的短发,而这类手机屏幕也是为了给摄像头、距离感应器等零部件预留位置而诞生的,刘海屏一词最早来源于苹果公司发布的苹果iPhone X手.

地推 5万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

2024年Android最全Android 卫星通信计算方位角,仰角,极化角(1),Android开发社招面试总结

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

2401_84556681的博客 1194

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android适配全面屏

测试了很多方法,下面这个是我找到的可以用的。在setContentView之前插入代码。首先sdk的版本要在28及以上。

qq_42877866的博客 1033

手机传感器辅助类

SensorUtil.java import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Handler;

doris_d的专栏 506

Android刘海屏、水滴屏全面屏适配

现在,市面上的屏幕尺寸和全面屏方案五花八门。这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖。为便于说明,后文提到的「刘海屏」「刘海区」都同时指代上图两种屏幕。 刘海屏、水滴屏全面屏适配细节 当我们在谈屏幕适配时,我们具体谈什么呢? 适应更长的屏幕 防止内容被刘海遮挡 其中第一点是所有应用都需要适配的,对应下文的声明最大长宽比,...

xiangzhihong8的专栏 1万+

Android适配之水滴屏和虚拟按键

文章目录水滴屏适配解决方案:底部虚拟键盘NavigationBar适配方案: 水滴屏适配解决方案: Android: smarxpan/NotchScreenTool: https://github.com/smarxpan/NotchScreenTool 底部虚拟键盘NavigationBar适配方案: 这里是代码方式: import android.annotation.SuppressLint; import android.app.Activity; import android.content.C

Mr_Tony的专栏 1112

Android 刘海、挖孔、水滴屏幕的状态高度获取与适配

一般需要处理状态栏的问题都是适配问题,适配就稍微有点麻烦,比如:刘海屏,水滴屏、以及刚刚不久出的挖孔屏等这类都属于刘海屏范围内,适配的话就要在各大厂商做处理了,比如华为:刚刚开始以为只需判断是否是刘海屏就好了,设置一个状态栏高度就好Ok了,结果不然: 状态栏高度: private fun setStatusHeight() { val layoutParams = base_head.layoutParams as LinearLayout.LayoutParams

qq_34900897的博客 9283

获取安卓刘海高度

import android.os.Build; static int screenTopMargin = 0; static int screenBottomMargin = 0; @Override protected void onCreate(Bundle savedInstanceState) { ....... if (Build.VERSION.SDK_INT &g...

itme268的博客 1万+

Android 获取屏幕宽高

最近开发项目需要动态适配大图片的布局,需要获取屏幕宽高来比例适配,看了许多大牛的博客,自己整理下获取屏幕宽高的几种方式。屏幕宽高分两种: 应用屏幕宽高:不包括了状态栏(刘海屏,水滴屏等),导航栏等系统装饰UI所占用的空间 实际屏幕宽高:包括了状态栏(刘海屏,水滴屏等),导航栏等系统装饰UI所占用的空间 获取屏幕离不开:Display 、DisPlayMetrics Display Provides information about the size and density of a logical di

weidiezeng的博客 2万+

android 全面屏/刘海屏有效适配

黑底问题 手机厂商追求高用户体验,屏幕宽高比越做越高。17:9 19:10 18:9 18.5:9所谓全面屏。 原来一般主流手机1920*1080分辨率 16:9高宽比。如果没有单独去配置属性,会导致在超过17:9宽高比手机上,底部一大块黑底。 适配方案 1920*1080 传统手机 ratio_float = 16/9 = 1.778 ; 2248*10...

zane_xiao的博客 6607
上一篇: Android 单例模式:你真的会了吗?
下一篇: Android 监视sensorLandscape时的屏幕方向改变
KingToAce
博客等级 码龄10年 9粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值