Android 系統(tǒng)欄

一剖淀、ActionBar(標(biāo)題欄)

android.app.ActionBar是 Android 3.0(API 11) 引入的界面頂部導(dǎo)航控件。如果需要在 3.0 以下使用 ActionBar尘执,需要先引入 Support Library 礼搁,然后使用 Support Library 里的android.support.v7.app.ActionBar瀑构。需要注意的是,使用不同包下的 ActionBar 時(shí)些举,操作的 API 也不相同跟狱。

使用系統(tǒng)提供的 ActionBar衔肢,可以自適應(yīng)不同大小的手機(jī)屏幕既们、指明當(dāng)前用戶正在操作的界面介褥、提供界面導(dǎo)航、搜索莺奔、下拉菜單等功能饥追,是 Activity 設(shè)計(jì)中非常重要的元素鬼吵。

由于 ActionBar 是受 Framework 層的控制边篮,而不是 Activity 內(nèi)容的一部分,某種程度上限制了 Android app 開(kāi)發(fā)的靈活性笤休,因此在 Android 5.0(API 21) 時(shí)引入了直接在 Activity 內(nèi)容中設(shè)計(jì)的 ToolBar尖飞。

接下來(lái)以 android.support.v7.app.ActionBar 進(jìn)行介紹,使用
android.support.v7.app.ActionBar 必須為 AppCompatActivity 的子類店雅,且主題必須為 AppCompat 家族的主題政基。

1、ActionBar 的顯示與隱藏

// == 顯示 ==
// 使用帶 ActionBar 的主題
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"

// == 隱藏 ==
// 方式1:指定無(wú) ActionBar 主題
android:theme="@style/Theme.AppCompat.Light.NoActionBar"

// 方式 2:Java 代碼
getSupportActionBar().hide();

// 方式 3:在 setContentView 方法前調(diào)用 supportRequestWindowFeature 方法
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

注意:
requestWindowFeature(Window.FEATURE_NO_TITLE) 是針對(duì) android.app.ActionBar 的隱藏闹啦,而 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 是針對(duì) android.support.v7.app.ActionBar 的隱藏沮明。

2、 ActionBar 返回鍵

// 1窍奋、顯示系統(tǒng)默認(rèn)的返回鍵
ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
   actionBar.setDisplayHomeAsUpEnabled(true);

// 2荐健、修改返回鍵圖標(biāo)
// 通過(guò)配置主題修改
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <!-- 返回鍵圖標(biāo) -->
    <!-- 需要調(diào)用 ActionBar 的 setDisplayHomeAsUpEnabled 方法才能生效 -->
    <item name="homeAsUpIndicator">@drawable/ic_navigate_before_black</item>
</style>

// 通過(guò) Java 代碼修改
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
    actionBar.setDisplayHomeAsUpEnabled(true); // 需要調(diào)用這個(gè)方法才能生效
    actionBar.setHomeAsUpIndicator(R.drawable.ic_navigate_before_black_24px);
}

// 3、重寫(xiě) Activity 的 onOptionsItemSelected 方法監(jiān)聽(tīng)返回鍵點(diǎn)擊
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {   
        case android.R.id.home:
            finish();
            break;           
    }
    return true;
}

3琳袄、ActionBar 動(dòng)作鍵

// 第一步:新建 res/menu 目錄用于存放動(dòng)作菜單文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu"
        android:title="menu"
        android:icon="@drawable/ic_menu_black"
        app:showAsAction="always"
        />
</menu>

// 第二步:重寫(xiě) Activity 的 onCreateOptionsMenu 方法加載菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.toolbar,menu);
     return true;
}

// 第三步:重寫(xiě) Activity 的 onOptionsItemSelected 方法對(duì)菜單點(diǎn)擊監(jiān)聽(tīng)@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu:
            Toast.makeText(ScreenAty.this, "menu", Toast.LENGTH_LONG).show();
            break;
    }
    return true;
}

4江场、修改 ActionBar 背景

// 1、通過(guò)主題修改
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- 標(biāo)題欄背景 -->
    <item name="colorPrimary">#ff0000</item>

    <!-- 狀態(tài)欄背景-->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

    <!-- 操作控件顏色窖逗,如 EditText 的光標(biāo)址否、RadioButton 等 -->
    <item name="colorAccent">@color/colorAccent</item>
</style>

// 2、通過(guò) Java 代碼
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.GREEN));

5碎紊、自定義 ActionBar 布局

ActionBar actionBar = getSupportActionBar();
View customAcbView = getLayoutInflater().inflate(R.layout.view_acb,null);
ActionBar.LayoutParams alp = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
actionBar.setCustomView(customAcbView,alp);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setElevation(0);

二佑附、ToolBar

android.widget.ToolBar 是在 Android 5.0(API 21) 推出的導(dǎo)航控件,可以說(shuō)它的出現(xiàn)就是替代原來(lái)的 ActionBar仗考。和 ActionBar 一樣帮匾,Google 也提供了向下兼容的 Support Library。如需在 Android 5.0(API 21) 以下使用 ToolBar痴鳄,需要先引入 Support Library,然后使用 Support Library 庫(kù)中提供的 android.support.v7.widget.ToolBar缸夹。同樣地痪寻,使用不同的 ToolBar 操作 API 也不相同

ToolBar 可直接在 Activity 內(nèi)容中編輯虽惭,因此具有比 ActionBar 更好的靈活性; 同時(shí)橡类,ToolBar 支持 material design 風(fēng)格。

接下來(lái)以 android.support.v7.widget.ToolBar 進(jìn)行介紹芽唇。

1顾画、添加 ToolBar

ToolBar 的使用可以像一般控件那樣添加到窗口控件中的任何位置取劫。可在 xml 布局文件中直接添加研侣,也可以在代碼中添加谱邪,由于導(dǎo)航欄一般都是位于一個(gè)界面的頂部,所以我們通常在 xml 布局文件中添加庶诡。

** 添加方式 1:xml 布局文件中添加 ToolBar**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="#ff0000" />

</LinearLayout>

** 添加方式 2:Java 代碼動(dòng)態(tài)添加 ToolBar **
xml 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    
</LinearLayout>

Java 代碼

// ToolBar 父容器
ll = (LinearLayout) findViewById(R.id.ll);

// ToolBar 高度
int toolBarHeight = 80;
TypedValue typedValue = new TypedValue();
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, typedValue, true)){
    toolBarHeight = TypedValue.complexToDimensionPixelSize(typedValue.data, getResources().getDisplayMetrics());
}

// 設(shè)置 ToolBar
Toolbar toolbar = new Toolbar(this);
toolbar.setBackgroundColor(Color.RED);

toolbar.setLayoutParams(new Toolbar.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT, toolBarHeight));
// 可添加到任意位置
ll.addView(toolbar,0);

注意:
由于 ToolBar 與 ActionBar 都是起導(dǎo)航的作用惦银,所以我們?cè)谑褂昧?ToolBar 之后可將 ActionBar 隱藏。但是兩者完全可以共存(親測(cè))末誓。網(wǎng)上有人說(shuō)使用 ToolBar 必須將 ActionBar 隱藏掉扯俱,其實(shí)沒(méi)那么絕對(duì)。

但是如果調(diào)用了setSupportActionBar(android.support.v7.widget.ToolBar toolbar)喇澡、setActionBar(android.widget.ToolBar toolbar) 方法將 ToolBar 設(shè)置到系統(tǒng) ActionBar 時(shí)迅栅,就必須隱藏掉系統(tǒng) ActionBar,而且必須是使用設(shè)置無(wú) ActionBar 主題的方式來(lái)隱藏(參見(jiàn)上面 ActionBar 的隱藏方式)晴玖,否則會(huì)報(bào)以下錯(cuò)誤:

java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

2读存、設(shè)置 ToolBar 屬性

方式 1:xml 布局文件中直接設(shè)置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:toolbar="http://schemas.android.com/apk/res-auto"
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="#ff0000"
        toolbar:title="ToolBar"
        toolbar:navigationIcon="@drawable/ic_navigate_before_black"
        toolbar:subtitle="456"
        toolbar:contentInsetLeft="0dp"
        toolbar:contentInsetStart="0dp"
        toolbar:contentInsetEnd="0dp"
        toolbar:contentInsetRight="0dp"
         >
    </android.support.v7.widget.Toolbar>

</LinearLayout>

注意:
在 xml 布局文件中設(shè)置 ToolBar 屬性時(shí)命名空間需要改為非 「android」 的其它任意字符,如上面代碼中改為了 toolbar窜醉。否則屬性將不會(huì)生效宪萄。

方式 2:Java 代碼中設(shè)置

Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
toolbar.setTitle("ToolBar");
toolbar.setBackgroundColor(Color.RED);
toolbar.setNavigationIcon(R.drawable.ic_navigate_before_black);
// ...

3、為 ToolBar 添加動(dòng)作項(xiàng)

res/menu/toolbar.xml 菜單文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu"
        android:title="menu"
        android:icon="@drawable/ic_menu_black"
        app:showAsAction="always"
        />
</menu>

添加方式 1:

當(dāng)調(diào)用了setSupportActionBar(android.support.v7.widget.ToolBar toolbar)setActionBar(android.widget.ToolBar toolbar)方法將 ToolBar 設(shè)置到系統(tǒng) ActionBar 時(shí):

// 重寫(xiě) Activity 的 onCreateOptionsMenu(Menu menu) 方法渲染菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar,menu);
    return true;
}

// 監(jiān)聽(tīng)方式 1:重寫(xiě) Activity 的 onOptionsItemSelected(MenuItem item) 方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()){
    case R.id.menu:
        Toast.makeText(ScreenAty.this,"menu",Toast.LENGTH_LONG).show();
  }
  return true;
}

// 監(jiān)聽(tīng)方式 2
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu:
                Toast.makeText(ScreenAty.this,"menu",Toast.LENGTH_LONG).show();
        }
        return true;
    }
});

添加方式 2

未調(diào)用setSupportActionBar(android.support.v7.widget.ToolBar toolbar)setActionBar(android.widget.ToolBar toolbar)方法將 ToolBar 應(yīng)用到系統(tǒng) ActionBar 中榨惰。

// 直接調(diào)用 inflateMenu 方法添加菜單
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
toolbar.inflateMenu(R.menu.toolbar);

// 只能使用這種方式監(jiān)聽(tīng)
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItekwmClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu:
                Toast.makeText(ScreenAty.this,"menu",Toast.LENGTH_LONG).show();
        }
        return true;
    }
});

4拜英、自定義 ToolBar 布局

由于 ToolBar 繼承至 ViewGroup,所以它可以包含任意子 View琅催。如果我們的子 View 也是一個(gè)容器控件居凶,那么我們就可以在這個(gè)容器控件中自由地?cái)[放其它 View,從而達(dá)到自定義 ToolBar 布局藤抡。但這樣做的前提是不要再設(shè)置 ToolBar 的標(biāo)題侠碧、子標(biāo)題、menu 等占位的屬性缠黍。具體代碼如下所示:

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="#ff0000"
        toolbar:contentInsetLeft="0dp"
        toolbar:contentInsetStart="0dp"
        toolbar:contentInsetEnd="0dp"
        toolbar:contentInsetRight="0dp"
         >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="標(biāo)題"
                android:layout_centerInParent="true"
                />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                />
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>

三弄兜、Status Bar(狀態(tài)欄)、Nav Bar(導(dǎo)航欄)

Status Bar 一直都存在于 Android 設(shè)備中瓷式,Nav Bar 是 Android 4.0(API 14) 才引入的替饿,雖然它們的引入都比較早,但在早期的系統(tǒng)中贸典,它們各自的很多屬性都不能被操作视卢,慢慢地相關(guān)屬性的操作才隨系統(tǒng)的升級(jí)添加進(jìn)來(lái)。

對(duì) Status Bar廊驼、Nav Bar 的操作方式大致相同据过,因此放在一起介紹惋砂。

1、隱藏

方式 1:通過(guò)配置主題

//  同時(shí)隱藏 Status Bar绳锅、Nav Bar西饵,需是 Activity 的直接子類且 minSdkVersion >= 11
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" 

方式 2:通過(guò) Java 代碼

// 隱藏 Status Bar
if (Build.VERSION.SDK_INT < 16) {// Android 4.1 以下設(shè)備
    activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
}else{// Android 4.1 及以上設(shè)備
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                                              | View.SYSTEM_UI_FLAG_FULLSCREEN
                                                              | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

// 隱藏導(dǎo)航欄,Android 4.0 以上
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

// Status Bar榨呆、ActionBar罗标、Nav Bar 同時(shí)隱藏
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                                          | View.SYSTEM_UI_FLAG_FULLSCREEN
                                                          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                                          | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                                          | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION );

2、漂富摺(API >= 16)

使 Status Bar闯割、Nav Bar 漂浮,即 Activity 布局內(nèi)容可以顯示在 Status Bar竿拆、Nav Bar下面宙拉。

// Status Bar 漂浮
if (Build.VERSION.SDK_INT >= 16)
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

// Nav Bar 漂浮
if (Build.VERSION.SDK_INT >= 16)
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

3、修改顏色(API >= 21)

方式1:通過(guò)配置主題

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <!-- ActionBar -->
    <item name="colorPrimary">@color/colorPrimary</item>

    <!-- Status Bar-->
    <item name="colorPrimaryDark">@android:color/transparent</item>

    <!-- EditText丙笋、CheckBox 等交互控件 -->
    <item name="colorAccent">@color/colorAccent</item>

    <!-- Nav Bar谢澈,需要配置在 values-v21 目錄中-->
    <item name="android:navigationBarColor">#0000ff</item>

</style>

方式 2:通過(guò) Java 代碼

// Status Bar
if (Build.VERSION.SDK_INT >= 21) {
    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.setStatusBarColor(Color.BLUE);
}

// Nav Bar
if(Build.VERSION.SDK_INT >= 21)
     activity.getWindow().setNavigationBarColor(Color.YELLOW);

4、透明(API >= 19)

方式 1:通過(guò)配置主題

在 res 目錄下新建 values-v19 御板、values-v21目錄锥忿,并在 values-v19 、values-v21 目錄下新建一個(gè)和 values 目錄相同的用于主題配置的文件(一般是 styles.xml)怠肋。 注意:values-v19敬鬓、values-v21 目錄下有的主題,在 values 目錄下也應(yīng)該有一套笙各,不然低版本運(yùn)行時(shí)會(huì)報(bào)找不到主題的錯(cuò)誤钉答。

res/values-v19/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- 方式1 -->
    <style name="transparentTheme" parent="Theme.AppCompat.Light.DarkActionBar">

        <!-- Status Bar -->
        <item name="android:windowTranslucentStatus">true</item>

        <!-- Nav Bar-->
        <item name="android:windowTranslucentNavigation">true</item>

    </style>

    <!-- 方式2使 Status Bar 透明, 應(yīng)用的界面必須為 Activity 的子類杈抢,不能為 AppCompatActivity 的子類-->
    <style name="transparentStatusBarHoloTheme" parent="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor">

        <!-- Status Bar-->
        <item name="android:windowTranslucentNavigation">false</item>

    </style>

</resources>

res/values-v21/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="transparentTheme" parent="Theme.AppCompat.Light.DarkActionBar">

        <!-- Status Bar-->
        <item name="colorPrimaryDark">@android:color/transparent</item>

        <!-- Status Bar-->
        <item name="android:statusBarColor">@android:color/transparent</item>

        <!-- Nav Bar -->
        <item name="android:navigationBarColor">@android:color/transparent</item>

    </style>

</resources>

res/values/styles.xml

<resources>    

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="transparentTheme" parent="AppTheme">
    </style>

    <style name="transparentStatusBarHoloTheme" parent="AppTheme">
    </style>

</resources>

方式 2:通過(guò) Java 代碼

// Status Bar
if(Build.VERSION.SDK_INT >= 19){
    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

// Status Bar
if(Build.VERSION.SDK_INT >= 21){
    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.setStatusBarColor(Color.TRANSPARENT);
}

// Nav Bar
if (Build.VERSION.SDK_INT >= 19) 
    activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

注意:
當(dāng) Status Bar 数尿、Nav Bar 透明后,有可能會(huì)占據(jù)原來(lái)的位置惶楼,此時(shí)默認(rèn)會(huì)顯示 Activity 頂級(jí)View(DecorView)的背景(白色)右蹦,這時(shí)不要誤以為透明未成功。下面的代碼可設(shè)置 DecorView 的背景:
activity.getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(this,android.R.color.darker_gray));

五歼捐、沉浸模式(API >= 19)

所謂沉浸模式何陆,就是將系統(tǒng)欄(狀態(tài)欄、ActionBar窥岩、ToolBar、導(dǎo)航欄)全部隱藏掉宰缤,使界面只剩下 Activty 的內(nèi)容颂翼。是 Android 4.4 引入的一種模式晃洒。

1、進(jìn)入沉浸模式

if (Build.VERSION.SDK_INT >= 19) {
     activity.getWindow().getDecorView().setSystemUiVisibility(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);
}

2朦乏、退出沉浸模式

if (Build.VERSION.SDK_INT >= 19) {
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                                              | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                                              | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

3球及、沉浸模式的分類

View.SYSTEM_UI_FLAG_IMMERSIVE

進(jìn)入此沉浸模式后,當(dāng)用戶在狀態(tài)欄或?qū)Ш綑趨^(qū)域向屏幕中心滑動(dòng)時(shí)呻疹,系統(tǒng)欄會(huì)重新顯示出來(lái)吃引,顯示后就不會(huì)再自動(dòng)隱藏。

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

進(jìn)入此沉浸模式后刽锤,當(dāng)用戶在狀態(tài)欄或?qū)Ш綑趨^(qū)域向屏幕中心滑動(dòng)時(shí)镊尺,Status Bar、Nav Bar 又會(huì)重新顯示并思,過(guò)一會(huì)兒又會(huì)自動(dòng)隱藏庐氮。如果退出沉浸模式是通過(guò)調(diào)用上面退出沉浸模式方法,則不會(huì)再自動(dòng)進(jìn)入沉浸模式宋彼。

六弄砍、總結(jié)

  1. 文章中同一操作有的有多種方式,可根據(jù)具體情況選擇最佳方式输涕。
  2. 本文介紹的大部分系統(tǒng)欄的操作和具體系統(tǒng)相關(guān)音婶,難免會(huì)有錯(cuò)誤的結(jié)論,望大家批評(píng)指正莱坎,我會(huì)盡快加以驗(yàn)證衣式。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市型奥,隨后出現(xiàn)的幾起案子瞳收,更是在濱河造成了極大的恐慌,老刑警劉巖厢汹,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟深,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烫葬,警方通過(guò)查閱死者的電腦和手機(jī)界弧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搭综,“玉大人垢箕,你說(shuō)我怎么就攤上這事《医恚” “怎么了条获?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒋歌。 經(jīng)常有香客問(wèn)我帅掘,道長(zhǎng)委煤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任修档,我火速辦了婚禮碧绞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吱窝。我一直安慰自己讥邻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布院峡。 她就那樣靜靜地躺著兴使,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撕予。 梳的紋絲不亂的頭發(fā)上鲫惶,一...
    開(kāi)封第一講書(shū)人閱讀 52,166評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音实抡,去河邊找鬼欠母。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吆寨,可吹牛的內(nèi)容都是我干的赏淌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啄清,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼六水!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起辣卒,我...
    開(kāi)封第一講書(shū)人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掷贾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荣茫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體想帅,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年啡莉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了港准。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咧欣,死狀恐怖浅缸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魄咕,我是刑警寧澤衩椒,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響毛萌,放射性物質(zhì)發(fā)生泄漏梢什。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一朝聋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囤躁,春花似錦冀痕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宵距,卻和暖如春腊尚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背满哪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工婿斥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哨鸭。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓民宿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親像鸡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活鹰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容