• 大小: 6KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Java
  • 标签: 刘海屏  适配  

资源简介

小米华为OPPO/VIVO手机刘海屏适配
判断是否有刘海屏,根据不同的上述4类机型,进行适配。
代码依据于各家的开发适配文档,未来可能有更新。

资源截图

代码片段和文件信息



import android.content.Context;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Utils {

    /**
     * 是否刘海
     *
     * @param context
     * @return
     */
    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 = (boolean) 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“);
        }
        return ret;
    }

    /**
     * 获取刘海尺寸:width、heightint[0]值为刘海宽度 int[1]值为刘海高度。
     *
     * @param context
     * @return
     */
    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 = (int[]) 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“);
        }
        return ret;
    }

    /**
     * 设置使用刘海区域
     *
     * @param window
     */
    public static void setFullScreenWindowLayoutInDisplayCutout(Window window) {
        if (window == null) {
            return;
        }

        try {
            WindowManager.LayoutParams layoutParams = window.getAttributes();
            Class layoutParamsExCls = Class.forName(“com.huawei.android.view.LayoutParamsEx“);
            Constructor con = layoutParamsExCls.getConstructor(WindowManager.LayoutParams.class);
            object layoutParamsExObj = con.newInstance(layoutParams);
            Method method = layoutParamsExCls.getMethod(“addHwFlags“ int.class);
            method.invoke(layoutParamsExObj FLAG_NOTCH_SUPPORT);
        } catch (Exception e) {
            Log.e(“test“ “other Exception“);
        }

评论

共有 条评论