android.view.WindowInsets#getDisplayCutout ( )源码实例Demo

下面列出了android.view.WindowInsets#getDisplayCutout ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: dingo   文件: FloatingViewManager.java
/**
 * Find the safe area of DisplayCutout.
 *
 * @param activity {@link Activity} (Portrait and `windowLayoutInDisplayCutoutMode` != never)
 * @return Safe cutout insets.
 */
public static Rect findCutoutSafeArea(@NonNull Activity activity) {
    final Rect safeInsetRect = new Rect();
    // TODO:Rewrite with android-x
    // TODO:Consider alternatives
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
        return safeInsetRect;
    }

    // Fix: getDisplayCutout() on a null object reference (issue #110)
    final WindowInsets windowInsets = activity.getWindow().getDecorView().getRootWindowInsets();
    if (windowInsets == null) {
        return safeInsetRect;
    }

    // set safeInsetRect
    final DisplayCutout displayCutout = windowInsets.getDisplayCutout();
    if (displayCutout != null) {
        safeInsetRect.set(displayCutout.getSafeInsetLeft(), displayCutout.getSafeInsetTop(), displayCutout.getSafeInsetRight(), displayCutout.getSafeInsetBottom());
    }

    return safeInsetRect;
}
 
源代码2 项目: DKVideoPlayer   文件: CutoutUtil.java
/**
 * 是否为允许全屏界面显示内容到刘海区域的刘海屏机型(与AndroidManifest中配置对应)
 */
public static boolean allowDisplayToCutout(Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        // 9.0系统全屏界面默认会保留黑边,不允许显示内容到刘海区域
        Window window = activity.getWindow();
        WindowInsets windowInsets = window.getDecorView().getRootWindowInsets();
        if (windowInsets == null) {
            return false;
        }
        DisplayCutout displayCutout = windowInsets.getDisplayCutout();
        if (displayCutout == null) {
            return false;
        }
        List<Rect> boundingRects = displayCutout.getBoundingRects();
        return boundingRects.size() > 0;
    } else {
        return hasCutoutHuawei(activity)
                || hasCutoutOPPO(activity)
                || hasCutoutVIVO(activity)
                || hasCutoutXIAOMI(activity);
    }
}
 
源代码3 项目: FloatingView   文件: FloatingViewManager.java
/**
 * Find the safe area of DisplayCutout.
 *
 * @param activity {@link Activity} (Portrait and `windowLayoutInDisplayCutoutMode` != never)
 * @return Safe cutout insets.
 */
public static Rect findCutoutSafeArea(@NonNull Activity activity) {
    final Rect safeInsetRect = new Rect();
    // TODO:Rewrite with android-x
    // TODO:Consider alternatives
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
        return safeInsetRect;
    }

    // Fix: getDisplayCutout() on a null object reference (issue #110)
    final WindowInsets windowInsets = activity.getWindow().getDecorView().getRootWindowInsets();
    if (windowInsets == null) {
        return safeInsetRect;
    }

    // set safeInsetRect
    final DisplayCutout displayCutout = windowInsets.getDisplayCutout();
    if (displayCutout != null) {
        safeInsetRect.set(displayCutout.getSafeInsetLeft(), displayCutout.getSafeInsetTop(), displayCutout.getSafeInsetRight(), displayCutout.getSafeInsetBottom());
    }

    return safeInsetRect;
}
 
源代码4 项目: Twire   文件: StreamFragment.java
@RequiresApi(Build.VERSION_CODES.P)
private DisplayCutout getDisplayCutout() {
    Activity activity = getActivity();
    if (activity != null) {
        WindowInsets windowInsets = activity.getWindow().getDecorView().getRootWindowInsets();
        if (windowInsets != null) {
            return windowInsets.getDisplayCutout();
        }
    }

    return null;
}
 
源代码5 项目: AndroidNavigation   文件: AppUtils.java
@TargetApi(28)
private static boolean attachHasOfficialNotch(View view) {
    WindowInsets windowInsets = view.getRootWindowInsets();
    if (windowInsets != null) {
        DisplayCutout displayCutout = windowInsets.getDisplayCutout();
        return displayCutout != null;
    } else {
        throw new IllegalStateException("activity has not yet attach to window, you must call `isCutout` after `Activity#onAttachedToWindow` is called.");
    }
}
 
源代码6 项目: CrazyDaily   文件: DeviceUtil.java
/**
 * 判断全面屏
 *
 * @param activity Activity
 * @return boolean
 */
public static boolean isFullScreenDisplay(@NonNull Activity activity) {
    if (isSupportP()) {
        // 谷歌官方提供
        Window window = activity.getWindow();
        if (window != null) {
            WindowInsets windowInsets = window.getDecorView().getRootWindowInsets();
            if (windowInsets != null) {
                DisplayCutout displayCutout = windowInsets.getDisplayCutout();
                if (displayCutout != null) {
                    List<Rect> rects = displayCutout.getBoundingRects();
                    // 一般为刘海屏即为全面屏
                    if (rects != null && rects.size() > 0) {
                        return true;
                    }
                }
            }
        }
    }

    WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
    if (wm != null) {
        Display defaultDisplay = wm.getDefaultDisplay();
        if (defaultDisplay != null) {
            DisplayMetrics dm = new DisplayMetrics();
            defaultDisplay.getRealMetrics(dm);
            float heightPixels = dm.heightPixels;
            float widthPixels = dm.widthPixels;
            // 通过分比率比例去判断
            return heightPixels / widthPixels >= 1.96f;
        }
    }
    return false;
}
 
源代码7 项目: UIWidget   文件: NotchUtil.java
/**
 * @param view
 * @return false indicates the failure to get the result
 */
@TargetApi(28)
private static boolean attachHasOfficialNotch(View view) {
    WindowInsets windowInsets = view.getRootWindowInsets();
    if (windowInsets != null) {
        DisplayCutout displayCutout = windowInsets.getDisplayCutout();
        sHasNotch = displayCutout != null;
        return true;
    } else {
        // view not attached, do nothing
        return false;
    }
}
 
源代码8 项目: UIWidget   文件: NotchUtil.java
@TargetApi(28)
private static void getOfficialSafeInsetRect(View view, Rect out) {
    if (view == null) {
        return;
    }
    WindowInsets rootWindowInsets = view.getRootWindowInsets();
    if (rootWindowInsets == null) {
        return;
    }
    DisplayCutout displayCutout = rootWindowInsets.getDisplayCutout();
    if (displayCutout != null) {
        out.set(displayCutout.getSafeInsetLeft(), displayCutout.getSafeInsetTop(),
                displayCutout.getSafeInsetRight(), displayCutout.getSafeInsetBottom());
    }
}
 
源代码9 项目: Android-skin-support   文件: SkinNotchUtils.java
/**
 *
 * @param view
 * @return false indicates the failure to get the result
 */
@TargetApi(28)
private static boolean attachHasOfficialNotch(View view){
    WindowInsets windowInsets = view.getRootWindowInsets();
    if(windowInsets != null){
        DisplayCutout displayCutout = windowInsets.getDisplayCutout();
        sHasNotch = displayCutout != null;
        return true;
    }else{
        // view not attached, do nothing
        return false;
    }
}
 
源代码10 项目: Android-skin-support   文件: SkinNotchUtils.java
@TargetApi(28)
private static void getOfficialSafeInsetRect(View view, Rect out) {
    if(view == null){
        return;
    }
    WindowInsets rootWindowInsets = view.getRootWindowInsets();
    if(rootWindowInsets == null){
        return;
    }
    DisplayCutout displayCutout = rootWindowInsets.getDisplayCutout();
    if(displayCutout != null){
        out.set(displayCutout.getSafeInsetLeft(), displayCutout.getSafeInsetTop(),
                displayCutout.getSafeInsetRight(), displayCutout.getSafeInsetBottom());
    }
}
 
源代码11 项目: ImmersionBar   文件: NotchUtils.java
/**
 * 获得DisplayCutout
 * Gets display cutout.
 *
 * @param activity the activity
 * @return the display cutout
 */
private static DisplayCutout getDisplayCutout(Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        if (activity != null) {
            Window window = activity.getWindow();
            if (window != null) {
                WindowInsets windowInsets = window.getDecorView().getRootWindowInsets();
                if (windowInsets != null) {
                    return windowInsets.getDisplayCutout();
                }
            }
        }
    }
    return null;
}
 
源代码12 项目: ImmersionBar   文件: NotchUtils.java
private static DisplayCutout getDisplayCutout(View view) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        if (view != null) {
            WindowInsets windowInsets = view.getRootWindowInsets();
            if (windowInsets != null) {
                return windowInsets.getDisplayCutout();
            }
        }
    }
    return null;
}
 
源代码13 项目: MNImageBrowser   文件: NotchUtils.java
/**
 * 获得DisplayCutout
 * Gets display cutout.
 *
 * @param activity the activity
 * @return the display cutout
 */
private static DisplayCutout getDisplayCutout(Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        if (activity != null) {
            Window window = activity.getWindow();
            if (window != null) {
                WindowInsets windowInsets = window.getDecorView().getRootWindowInsets();
                if (windowInsets != null) {
                    return windowInsets.getDisplayCutout();
                }
            }
        }
    }
    return null;
}
 
源代码14 项目: MNImageBrowser   文件: NotchUtils.java
private static DisplayCutout getDisplayCutout(View view) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        if (view != null) {
            WindowInsets windowInsets = view.getRootWindowInsets();
            if (windowInsets != null) {
                return windowInsets.getDisplayCutout();
            }
        }
    }
    return null;
}