Android判断是否为刘海屏
- 主要总结主流品牌小米、华为、oppo、vivo的刘海屏判断。在某些特殊页面需要适配刘海屏时,可以用以下方法判断。
或者判断屏幕比例是否大于2。- /**
* 小米刘海屏判断.
*/
- public static int getInt(String key,Activity activity) {
- int result = 0;
- if (isXiaomi()){
- try {
- ClassLoader classLoader = activity.getClassLoader();
- @SuppressWarnings("rawtypes")
- Class SystemProperties = classLoader.loadClass("android.os.SystemProperties");
- //参数类型
- @SuppressWarnings("rawtypes")
- Class[] paramTypes = new Class[2];
- paramTypes[0] = String.class;
- paramTypes[1] = int.class;
- Method getInt = SystemProperties.getMethod("getInt", paramTypes);
- //参数
- Object[] params = new Object[2];
- params[0] = new String(key);
- params[1] = new Integer(0);
- result = (Integer) getInt.invoke(SystemProperties, params);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- // 是否是小米手机
- public static boolean isXiaomi() {
- return "Xiaomi".equals(Build.MANUFACTURER);
- }
- /**
* 华为刘海屏判断
*/
- public static boolean hasNotchAtHuawei(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 = (boolean) get.invoke(HwNotchSizeUtil);
- } catch (ClassNotFoundException e) {
- LogUtil.e("Huawei", "hasNotchInScreen ClassNotFoundException");
- } catch (NoSuchMethodException e) {
- LogUtil.e("Huawei", "hasNotchInScreen NoSuchMethodException");
- } catch (Exception e) {
- LogUtil.e("Huawei", "hasNotchInScreen Exception");
- } finally {
- return ret;
- }
- }
- /**
* VIVO刘海屏判断
*/
- public static final int VIVO_NOTCH = 0x00000020;//是否有刘海
- public static final int VIVO_FILLET = 0x00000008;//是否有圆角
- public static boolean hasNotchAtVivo(Context context) {
- boolean ret = false;
- try {
- ClassLoader classLoader = context.getClassLoader();
- Class FtFeature = classLoader.loadClass("android.util.FtFeature");
- Method method = FtFeature.getMethod("isFeatureSupport", int.class);
- ret = (boolean) method.invoke(FtFeature, VIVO_NOTCH);
- } catch (ClassNotFoundException e) {
- LogUtil.e( "Vivo","hasNotchAtVivo ClassNotFoundException");
- } catch (NoSuchMethodException e) {
- LogUtil.e( "Vivo","hasNotchAtVivo NoSuchMethodException");
- } catch (Exception e) {
- LogUtil.e( "Vivo","hasNotchAtVivo Exception");
- } finally {
- return ret;
- }
- }
- /**
* OPPO刘海屏判断
*/
- public static boolean hasNotchAtOPPO(Context context) {
- return context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");
- }
By LiYing
Android判断是否为刘海屏的更多相关文章
- 一大波 Android 刘海屏来袭,全网最全适配技巧!
一.序 Hi,大家好,我是承香墨影! Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议.不过不管你怎样,Android 也要跻入 &q ...
- Android手机刘海屏(附工具类)
工具类 根据VIVO.OPPO.华为官方文档,这里整理了一个刘海屏工具类,判断设备是否为刘海屏,其他厂商公布相关方法后也会在此更新. OPPO: /** * OPPO * * @param conte ...
- Unity与Android刘海屏适配
本周学习Unity与Android刘海屏适配 关于刘海屏适配部分 网上有很多教程 这里只是做一下整理 https://blog.csdn.net/xj1009420846/article/detail ...
- JQuery 判断IPad、IPhone、Android是横屏还是竖屏(Window.Orientation实现)
在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法. 代码如下: function ...
- 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法 其实主要是通过window.or ...
- Android刘海屏适配 ----- ImmersionBar
android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换.刘海屏.软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity.Fr ...
- iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
保证能判断,呕心沥血,不行切JIJI 方法一 Objective-C // iPhoneX.iPhoneXR.iPhoneXs.iPhoneXs Max等 // 判断刘海屏,返回YES表示是刘海屏 - ...
- Android判断屏幕锁屏的方法总结
由于做一个项目,需要判断屏幕是否锁屏,发现网上方法很多,但是比较杂,现在进行总结一下: 总共有两类方法: 一.代码直接判定 二.接收广播 现在先说第一类方法(代码直接判定): 1.通过PowerMan ...
- Android框架浅析之锁屏(Keyguard)机制原理
最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...
随机推荐
- BFS:Nightmare(可返回路径)
解题心得: 1.point:关于可以返回路径的BFS的标记方法,并非是简单的0-1,而是可以用时间比较之后判断是否push. 2.queue创建的地点(初始化问题),在全局中创建queue在一次调用B ...
- 一个漂亮的PHP验证码
自己导入字体,可以按照自己的额需要随便修改. <?php class Imagecode{ private $width ; private $height; private $counts; ...
- IOS开发---菜鸟学习之路--(二十)-二维码扫描功能的实现
本章将讲解如何实现二维码扫描的功能 首先在github上下载ZBar SDK地址https://github.com/bmorton/ZBarSDK 然后将如下的相关类库添加进去 AVFoundati ...
- 引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符
今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error. >e:\c++\button_fly2\b ...
- mini购物车程序
product_list=[("Iphohe",5800),("Mac Pro Book",12900), ("xiaomi 4c",120 ...
- git+jenkins持续集成三-定时构建语法
构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...
- 07 JVM 是如何实现反射的
Java 中的反射 反射是 Java 语言的一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为. 我们可以通过 Class 对象枚举该类中的所有方法,还可以通过 Met ...
- 最少的硬币数量组合出1到m之间的任意面值(贪心算法)
题目描述: 你有n种不同面值的硬币,每种面值的硬币都有无限多个,为了方便购物,你希望带尽量少的硬币,并且要能组合出 1 到 m 之间(包含1和m)的所有面值. 输入描述: 第一行包含两个整数:m ,n ...
- imx6移植librtmp
一.openssl交叉编译 1.下载 https://www.openssl.org/source/ 版本不要太高,刚开始版本高了,有些函数取消了,链接不上 使用1.0.1f即可 2.编译成共享库 . ...
- java作业8
interface Pet{ public String getName(); public String getColor(); public int getAge(); } class Cat i ...