一剖淀、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é)
- 文章中同一操作有的有多種方式,可根據(jù)具體情況選擇最佳方式输涕。
- 本文介紹的大部分系統(tǒng)欄的操作和具體系統(tǒng)相關(guān)音婶,難免會(huì)有錯(cuò)誤的結(jié)論,望大家批評(píng)指正莱坎,我會(huì)盡快加以驗(yàn)證衣式。