前言
Android沉浸式與全屏是不一樣的兩種主題,接下來我們看看吧
Android實現全屏
通過主題屬性來實現
<style name="FullScreenTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:background">#ff00beb4</item>
</style>複製程式碼
在AndroidManifest.xml中使用
<activity android:name=".TestActivity"
android:theme="@style/FullScreenTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>複製程式碼
使用全屏的主題
<activity android:name=".TestActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>複製程式碼
或者
<activity android:name=".TestActivity"
android:theme="@android:style/Theme.Material.NoActionBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>複製程式碼
java程式碼中設定屬性
requestWindowFeature(Window.FEATURE_NO_TITLE);//這行程式碼一定要在setContentView之前,不然會閃退
setContentView(R.layout.activity_test);
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);複製程式碼
效果圖
Android實現透明狀態列
半沉浸式
<style name="TranslucentTheme">
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">#ff00beb4</item>
</style>複製程式碼
使用:
<activity android:name=".TestActivity"
android:theme="@style/TranslucentTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>複製程式碼
半透明效果圖
這不是好好的嗎?但這是5.1的系統,當切換到6.0以後的系統的時候
透明式6.0
Window window = activity.getWindow();
//這一步最好要做,因為如果這兩個flag沒有清除的話下面沒有生效
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//設定佈局能夠延伸到狀態列(StatusBar)和導航欄(NavigationBar)裡面
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//設定狀態列(StatusBar)顏色透明
window.setStatusBarColor(Color.TRANSPARENT);
//設定導航欄(NavigationBar)顏色透明
window.setNavigationBarColor(Color.TRANSPARENT);複製程式碼
加上這段程式碼就可以了,效果如圖
關於導航欄SystemUiVisibility
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE//保持系統的穩定性
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//隱藏導航欄的佈局,但是SYSTEM_UI_FLAG_HIDE_NAVIGATION不設定不會生效
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION//隱藏號航欄
| View.SYSTEM_UI_FLAG_IMMERSIVE//沉浸式,會全屏
/*| View.SYSTEM_UI_FLAG_FULLSCREEN//全屏
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN*/
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//粘性沉浸式,下滑和上滑才能顯示狀態列和導航欄
| 0x00200000 |//隱藏導航欄的back鍵
0x00400000 |//隱藏導航欄的home鍵
0x01000000;//隱藏導航欄的recent鍵
window.getDecorView().setSystemUiVisibility(flags);複製程式碼
關於fitsSystemWindows
android:fitsSystemWindows=true<!--可以讓你的佈局不會頂到狀態列和導航欄上,但是顏色依然會透過去-->複製程式碼