android.view.View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION源码实例Demo

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

源代码1 项目: keemob   文件: CordovaActivity.java
/**
 * Called when view focus is changed
 */
@SuppressLint("InlinedApi")
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && immersiveMode) {
        final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    }
}
 
源代码2 项目: xmall   文件: CordovaActivity.java
/**
 * Called when view focus is changed
 */
@SuppressLint("InlinedApi")
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && immersiveMode) {
        final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    }
}
 
源代码3 项目: a   文件: ImmersionBar.java
/**
 * Hide bar.
 * 隐藏或显示状态栏和导航栏。
 *
 * @param uiFlags the ui flags
 * @return the int
 */

@SuppressLint("ObsoleteSdkInt")
private int hideBar(int uiFlags) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        switch (mBarParams.barHide) {
            case FLAG_HIDE_BAR:
                uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.INVISIBLE;
                break;
            case FLAG_HIDE_STATUS_BAR:
                uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.INVISIBLE;
                break;
            case FLAG_HIDE_NAVIGATION_BAR:
                uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
                break;
            case FLAG_SHOW_BAR:
                uiFlags |= View.SYSTEM_UI_FLAG_VISIBLE;
                break;
        }
    }
    return uiFlags | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
 
源代码4 项目: GeometricWeather   文件: DisplayUtils.java
public static void setSystemBarStyle(Context context, Window window, boolean miniAlpha,
                                     boolean statusShader, boolean lightStatus,
                                     boolean navigationShader, boolean lightNavigation) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        return;
    }

    // statusShader &= Build.VERSION.SDK_INT < Build.VERSION_CODES.Q;
    lightStatus &= Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    navigationShader &= Build.VERSION.SDK_INT < Build.VERSION_CODES.Q;
    lightNavigation &= Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;

    int visibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    if (lightStatus) {
        visibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    }
    if (lightNavigation) {
        visibility |= View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
    }
    window.getDecorView().setSystemUiVisibility(visibility);

    setSystemBarColor(context, window, miniAlpha, statusShader, lightStatus, navigationShader, lightNavigation);
}
 
源代码5 项目: Alite   文件: AndroidUtil.java
@SuppressLint("InlinedApi")
public static void setImmersion(View view) {
	if (view == null || Settings.navButtonsVisible) {
		return;
	}
	int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
		flags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
	} 
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
		flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
				View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
				View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
				View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
				View.SYSTEM_UI_FLAG_FULLSCREEN;					
	}
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
		flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;	
	}
	if (flags != 0) {
		view.setSystemUiVisibility(flags);
	}
}
 
源代码6 项目: Mysplash   文件: DisplayUtils.java
public static void setSystemBarStyle(MysplashActivity activity, boolean miniAlpha,
                                     boolean statusShader, boolean lightStatus,
                                     boolean navigationShader, boolean lightNavigation) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        return;
    }

    statusShader &= Build.VERSION.SDK_INT < Build.VERSION_CODES.Q;
    lightStatus &= Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    navigationShader &= Build.VERSION.SDK_INT < Build.VERSION_CODES.Q;
    lightNavigation &= Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;

    int visibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    if (lightStatus) {
        visibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    }
    if (lightNavigation) {
        visibility |= View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
    }
    activity.getWindow().getDecorView().setSystemUiVisibility(visibility);

    setSystemBarColor(activity, miniAlpha, statusShader, lightStatus, navigationShader, lightNavigation);
}
 
源代码7 项目: Android-Architecture   文件: StatusBarUtil.java
/**
 * 设置状态栏颜色
 *
 * @param activity
 * @param color
 */
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static void setColor(Activity activity, int color) {
    View decorView = activity.getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_LAYOUT_STABLE //
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN//全屏,显示状态栏
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;//隐藏虚拟按键
    decorView.setSystemUiVisibility(option);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //添加flag来设置状态栏颜色
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().setStatusBarColor(color);//设置状态栏颜色
        if (NavigationBarUtil.hasNavigationBar(activity)) {//若有虚拟按键
            activity.getWindow().setNavigationBarColor(color);//设置虚拟按键颜色
        }
    } else {//处理4.4
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
}
 
源代码8 项目: DevUtils   文件: BarUtils.java
/**
 * 设置 Navigation Bar 是否可见
 * @param window    {@link Window}
 * @param isVisible 是否显示 Navigation Bar
 * @return {@code true} success, {@code false} fail
 */
public static boolean setNavBarVisibility(final Window window, final boolean isVisible) {
    if (window != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        final ViewGroup decorView = (ViewGroup) window.getDecorView();
        for (int i = 0, count = decorView.getChildCount(); i < count; i++) {
            final View child = decorView.getChildAt(i);
            final int id = child.getId();
            if (id != View.NO_ID) {
                String resourceEntryName = Resources.getSystem().getResourceEntryName(id);
                if ("navigationBarBackground".equals(resourceEntryName)) {
                    child.setVisibility(isVisible ? View.VISIBLE : View.INVISIBLE);
                }
            }
        }
        final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        if (isVisible) {
            decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~uiOptions);
        } else {
            decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() | uiOptions);
        }
        return true;
    }
    return false;
}
 
源代码9 项目: Rucky   文件: InitActivity.java
public void hideNavigationBar() {
    final View decorView = this.getWindow().getDecorView();
    final int uiOptions =
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            InitActivity.this.runOnUiThread(() -> decorView.setSystemUiVisibility(uiOptions));
        }
    };
    timer.scheduleAtFixedRate(task, 1, 2);

}
 
@Override
protected void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);

    // set navigation bar status, remember to disable "setNavigationBarTintEnabled"
    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    // This work only for android 4.4+
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().getDecorView().setSystemUiVisibility(flags);

        // Code below is to handle presses of Volume up or Volume down.
        // Without this, after pressing volume buttons, the navigation bar will
        // show up and won't hide
        final View decorView = getWindow().getDecorView();
        decorView.setOnSystemUiVisibilityChangeListener(visibility -> {
            if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                decorView.setSystemUiVisibility(flags);
            }
        });
    }
}
 
源代码11 项目: DMusic   文件: Util.java
/**
 * 隐藏状态栏&&导航栏
 */
public static void hideSystemUI(Activity activity, View... views) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        // 4.1 above API level 16
        int uist = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LOW_PROFILE
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            uist |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        }
        View decorView = activity.getWindow().getDecorView();
        decorView.setSystemUiVisibility(uist);
        // Some views can setFitsSystemWindows(true), setPadding()
        setFitsPadding(0, getStatusBarHeight(activity), getNavigationBarHeight(activity), 0, views);
    } else {
        WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        activity.getWindow().setAttributes(attrs);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }
}
 
源代码12 项目: Musicoco   文件: Utils.java
@Deprecated
    public static void hideSystemNavigationBar(Activity activity) {
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            View view = activity.getWindow().getDecorView();
            view.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            View decorView = activity.getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
//            | View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }
 
源代码13 项目: MHViewer   文件: SystemUiHelperImplJB.java
@Override
protected int createShowFlags() {
    int flag = super.createShowFlags();

    if (mLevel >= SystemUiHelper.LEVEL_HIDE_STATUS_BAR) {
        flag |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

        if (mLevel >= SystemUiHelper.LEVEL_LEAN_BACK) {
            flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        }
    }

    return flag;
}
 
/**
 * Called when view focus is changed
 */
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && immersiveMode) {
        final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    }
}
 
源代码15 项目: HgLauncher   文件: ViewUtils.java
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static int setWindowbarMode(String mode) {
    int baseLayout;
    if (Utils.sdkIsAround(19)) {
        baseLayout = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    } else {
        baseLayout = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    }
    int noStatusLayout = baseLayout
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_FULLSCREEN;
    int noNavLayout = baseLayout
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

    switch (mode) {
        case "status":
            return noStatusLayout;
        case "nav":
            return noNavLayout;
        case "both":
            return noStatusLayout | noNavLayout;
        case "none":
        default:
            return View.SYSTEM_UI_LAYOUT_FLAGS;
    }
}
 
源代码16 项目: Android-Application-ZJB   文件: BaseActivity.java
/**
 * If the Android version is higher than KitKat(API>=19) <br> use this call to show & hide
 *
 * @param enable
 */
@SuppressLint("NewApi")
public final void makeFullScreenAfterKitKat(boolean enable) {
    try {
        View decorView = getWindow().getDecorView();
        if (enable) {
            int uiOptionsEnable = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
            decorView.setSystemUiVisibility(uiOptionsEnable);

        } else {
            int uiOptionsDisable = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
            decorView.setSystemUiVisibility(uiOptionsDisable);
        }

    } catch (Exception e) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        if (enable) {
            lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        } else {
            lp.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
        getWindow().setAttributes(lp);
    }
}
 
源代码17 项目: v9porn   文件: ExoVideoControlsMobile.java
/**
 * Correctly sets up the fullscreen flags to avoid popping when we switch
 * between fullscreen and not
 */
private void initUiFlags() {
    int flags = View.SYSTEM_UI_FLAG_VISIBLE;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
    }
    View decorView = ActivityUtils.getWindow(getContext()).getDecorView();
    if (decorView != null) {
        decorView.setSystemUiVisibility(flags);
        decorView.setOnSystemUiVisibilityChangeListener(fullScreenListener);
    }
}
 
源代码18 项目: SkyTube   文件: ImmersiveModeFragment.java
/**
 * Change the navigation bar's visibility status.
 */
private void changeNavigationBarVisibility(boolean setBarToVisible) {
	try {
		int newUiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();

		// navigation bar hiding:  backwards compatible to ICS.
		if (Build.VERSION.SDK_INT >= 14) {
			newUiOptions = setBarToVisible
					? newUiOptions & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
					: newUiOptions | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
		}

		// status bar hiding:  backwards compatible to Jellybean
		if (Build.VERSION.SDK_INT >= 16) {
			newUiOptions = setBarToVisible
					? newUiOptions & ~View.SYSTEM_UI_FLAG_FULLSCREEN & ~View.SYSTEM_UI_FLAG_LAYOUT_STABLE & ~View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION & ~View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
					: newUiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
		}

		// immersive mode:  backward compatible to KitKat
		if (Build.VERSION.SDK_INT >= 19) {
			newUiOptions = setBarToVisible
					? newUiOptions & ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
					: newUiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
		}

		getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
	} catch (Throwable tr) {
		Logger.e(this, "Exception caught while trying to change the nav bar visibility...", tr);
	}
}
 
源代码19 项目: PLDroidShortVideo   文件: VideoRecordActivity.java
@Override
protected void onStart() {
    super.onStart();
    if (Build.VERSION.SDK_INT >= 19 && Utils.checkDeviceHasNavigationBar(this)) {
        int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide
                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        mDecorView.setSystemUiVisibility(flag);
    }
}
 
源代码20 项目: GravityBox   文件: ModExpandedDesktop.java
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
    if (DEBUG_LAYOUT) log("getContentInsetHintLw");
    try {
        if (!isImmersiveModeActive()) {
            return XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
        }

        WindowManager.LayoutParams attrs = (WindowManager.LayoutParams) param.args[0];
        final int displayRotation = (int) param.args[1];
        Rect contentInset = (Rect) param.args[2];
        Rect stableInset = (Rect) param.args[3];
        Rect outOutsets = (Rect) param.args[4];

        final int fl = updateWindowManagerVisibilityFlagsForExpandedDesktop(attrs.flags);
        final int systemUiVisibility = updateSystemUiVisibilityFlagsForExpandedDesktop(attrs.systemUiVisibility |
                XposedHelpers.getIntField(attrs, "subtreeSystemUiVisibility"));

        final boolean useOutsets = outOutsets != null &&
                (boolean) mShouldUseOutsets.invoke(param.thisObject, attrs, fl);
        if (useOutsets) {
            int outset = (int) XposedHelpers.callStaticMethod(mClsScreenShapeHelper,
                    "getWindowOutsetBottomPx", mContext.getResources());
            if (outset > 0) {
                if (displayRotation == Surface.ROTATION_0) {
                    outOutsets.bottom += outset;
                } else if (displayRotation == Surface.ROTATION_90) {
                    outOutsets.right += outset;
                } else if (displayRotation == Surface.ROTATION_180) {
                    outOutsets.top += outset;
                } else if (displayRotation == Surface.ROTATION_270) {
                    outOutsets.left += outset;
                }
            }
        }

        if ((fl & (WmLp.FLAG_LAYOUT_IN_SCREEN | WmLp.FLAG_LAYOUT_INSET_DECOR))
                == (WmLp.FLAG_LAYOUT_IN_SCREEN | WmLp.FLAG_LAYOUT_INSET_DECOR)) {
            int availRight, availBottom;
            if ((Boolean) mCanHideNavigationBar.invoke(param.thisObject) &&
                    (systemUiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0) {
                availRight = getInt("mUnrestrictedScreenLeft") + getInt("mUnrestrictedScreenWidth");
                availBottom = getInt("mUnrestrictedScreenTop") + getInt("mUnrestrictedScreenHeight");
            } else {
                availRight = getInt("mRestrictedScreenLeft") + getInt("mRestrictedScreenWidth");
                availBottom = getInt("mRestrictedScreenTop") + getInt("mRestrictedScreenHeight");
            }
            if ((systemUiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
                if ((fl & WmLp.FLAG_FULLSCREEN) != 0) {
                    contentInset.set(getInt("mStableFullscreenLeft"), getInt("mStableFullscreenTop"),
                            availRight - getInt("mStableFullscreenRight"),
                            availBottom - getInt("mStableFullscreenBottom"));
                } else {
                    contentInset.set(getInt("mStableLeft"), getInt("mStableTop"),
                            availRight - getInt("mStableRight"), availBottom - getInt("mStableBottom"));
                }
            } else if ((fl & WmLp.FLAG_FULLSCREEN) != 0 || (fl & WmLp.FLAG_LAYOUT_IN_OVERSCAN) != 0) {
                contentInset.setEmpty();
            } else if ((systemUiVisibility & (View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)) == 0) {
                contentInset.set(getInt("mCurLeft"), getInt("mCurTop"),
                        availRight - getInt("mCurRight"), availBottom - getInt("mCurBottom"));
            } else {
                contentInset.set(getInt("mCurLeft"), getInt("mCurTop"),
                        availRight - getInt("mCurRight"), availBottom - getInt("mCurBottom"));
            }

            if (stableInset != null) {
                stableInset.set(getInt("mStableLeft"), getInt("mStableTop"),
                        availRight - getInt("mStableRight"),
                        availBottom - getInt("mStableBottom"));
            }

            return null;
        }
        contentInset.setEmpty();
        if (stableInset != null) {
            stableInset.setEmpty();
        }
        return null;
    } catch (Throwable t) {
        logAndMute(param.method.getName(), t);
        return XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
    }
}
 
 方法所在类
 同类方法