需求背景
應用啟動頁一般要全屏顯示,使用全屏的引導頁來增強顯示效果专酗。 今天我們研究一下如何實現(xiàn)全屏引導頁睹逃,以及過程中遇到的問題,對應的解決方案。
實現(xiàn)方案
方案一
第一步沉填,我們定義顯示樣式疗隶,打開styles.xml文件,定義AppTheme.NoActionBar與AppTheme.Launcher:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.Launcher" parent="AppTheme.NoActionBar">
<item name="android:windowBackground">@color/colorPrimaryDark</item>
</style>
樣式中翼闹,windowBackground設置整個窗口背景斑鼻,可以設置color色值或者drawable資源。 第二步猎荠,Activity配置該主題樣式:
<activity
android:exported="true"
android:name=".activity.GuideActivity"
android:theme="@style/AppTheme.Launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
···
第三步坚弱,打開啟動頁GuideActivity代碼,在onCreate中設置全屏顯示:
···
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Launcher);
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
setContentView(R.layout.activity_guide);
}
此時我們安裝关摇、運行應用荒叶,看到應用確實全屏展示了。 但是同時也會有一些問題输虱,在手機最上部狀態(tài)欄顯示全黑些楣,如下如所示:
我們希望全屏顯示,當然狀態(tài)欄也要包含在內(nèi)宪睹,否則狀態(tài)欄很突兀愁茁。 仔細研發(fā),發(fā)現(xiàn)出現(xiàn)該問題原因是因為劉海屏亭病,所以我們兼容一下劉海屏:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Launcher);
fitsNotchScreen();
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
setContentView(R.layout.activity_guide);
}
/**
* 適配劉海屏
*/
private void fitsNotchScreen() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
getWindow().setAttributes(lp);
}
}
此時再次打開應用鹅很,發(fā)現(xiàn)狀態(tài)欄全黑的背景消失了。效果如下:
該方案優(yōu)勢:無需引入三方資源命贴,減少方法數(shù)量和代碼冗余道宅,規(guī)范代碼結(jié)構(gòu)食听。
方案二
下面再說一個簡單的方式胸蛛,我們可以直接使用開源兼容庫Immersionbar,它是一個第三方的類庫,用于 android 4.4以上沉浸式實現(xiàn)樱报。具體項目介紹和復雜的使用可以參考Github項目說明文檔和使用文檔葬项。 我下面就簡單介紹實現(xiàn)引導頁全屏的沉浸式方案。使用方案二實現(xiàn)迹蛤,不用進行方案一相關(guān)的調(diào)整民珍、改造〉领可以直接按照下面方式實現(xiàn): 第一步嚷量,在build.gradle添加項目依賴:
implementation 'com.gyf.immersionbar:immersionbar:2.3.3' //沉浸式桌面
第二步,找到應用引導頁GuideActivity逆趣,修改onCreate方法蝶溶,添加ImmersionBar實現(xiàn):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Launcher);
ImmersionBar.with(this).transparentBar().init();
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
setContentView(R.layout.activity_guide);
}
此時,改造就完成了,效果和方案一相同抖所。 該方案優(yōu)勢:兼容了各類國產(chǎn)型號手機梨州,無需各機型分別適配。 全屏顯示效果:
項目代碼參考:睡眠助理