下面列出了android.view.View#getRootWindowInsets ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Map<String, Object> _getSafeAreaInsets() {
final Map<String, Object> constants = new HashMap<>();
if (getCurrentActivity() != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final Activity activity = getCurrentActivity();
final View view = activity.getWindow().getDecorView();
final WindowInsets insets = view.getRootWindowInsets();
constants.put("safeAreaInsetsTop", PixelUtil.toDIPFromPixel(insets.getSystemWindowInsetTop()));
constants.put("safeAreaInsetsBottom", PixelUtil.toDIPFromPixel(insets.getSystemWindowInsetBottom()));
constants.put("safeAreaInsetsLeft", PixelUtil.toDIPFromPixel(insets.getSystemWindowInsetLeft()));
constants.put("safeAreaInsetsRight", PixelUtil.toDIPFromPixel(insets.getSystemWindowInsetRight()));
} else {
constants.put("safeAreaInsetsTop", 0);
constants.put("safeAreaInsetsBottom", 0);
constants.put("safeAreaInsetsLeft", 0);
constants.put("safeAreaInsetsRight", 0);
}
return constants;
}
@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.");
}
}
/**
* @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;
}
}
@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());
}
}
/**
*
* @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;
}
}
@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());
}
}
@TargetApi(28)
private static void realHandleDisplayCutoutMode(Window window, View decorView) {
if (decorView.getRootWindowInsets() != null &&
decorView.getRootWindowInsets().getDisplayCutout() != null) {
WindowManager.LayoutParams params = window.getAttributes();
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams
.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(params);
}
}
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;
}
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;
}
@TargetApi(28)
private static void realHandleDisplayCutoutMode(Window window, View decorView) {
if (decorView.getRootWindowInsets() != null &&
decorView.getRootWindowInsets().getDisplayCutout() != null) {
WindowManager.LayoutParams params = window.getAttributes();
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams
.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(params);
}
}