UI

透明状态栏、全屏应用、沉浸模式

2017-05-05  本文已影响164人  咯咯蛋

透明状态栏

方法1

同4.4设置,但是5.0以上会添加一层黑色透明。

方法2
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

这里windowTranslucentStatus或windowTranslucentNavigation设置true后,系统会设置SYSTEM_UI_FLAG_LAYOUT_STABLESYSTEM_UI_FLAG_LAYOUT_FULLSCREEN属性,同时设置statusBarColor让statusbar透到自己的layout上去。

方法3
<item name="android:statusBarColor">@android:color/transparent</item>
//getWindow().setStatusBarColor(Color.TRANSPARENT);

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  

此时同样需要注意设置fitsSystemWindows为true, 或者代码中添加一个view,如下:

StatusBarView statusBarView = new StatusBarView(activity);
LinearLayout.LayoutParams params =
        new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));
statusBarView.setId(FAKE_TRANSLUCENT_VIEW_ID);

ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
contentView.addView(statusBarView.setId);
方法4

如果只是想设置一个图片在statusbar后面,而不是设置一个view,则可以设置activity级别的背景

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:background">@color/colorAccent</item>
PS

参考

全屏布局

方法1
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
方法2
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

沉浸式布局

Leanback模式

private void enableFullScreen(boolean enabled) {
    int newVisibility =  View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

    if(enabled) {
        newVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN
                |  View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    }

    getDecorView().setSystemUiVisibility(newVisibility);
}

Immersive模式

protected void enableFullScreen(boolean enabled) {
    int newVisibility =  View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

    if(enabled) {
        newVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE;
    }

    getDecorView().setSystemUiVisibility(newVisibility);
}

Immersive Sticky模式

沉浸式布局注意点

参考链接

上一篇 下一篇

猜你喜欢

热点阅读