Android全屏與透明狀態列

JonnyPeng發表於2019-03-04

前言

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.x
半沉浸式效果圖5.x

這不是好好的嗎?但這是5.1的系統,當切換到6.0以後的系統的時候

半沉浸式效果圖6.0
半沉浸式效果圖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<!--可以讓你的佈局不會頂到狀態列和導航欄上,但是顏色依然會透過去-->複製程式碼

相關文章