如何创建保留通知栏的全屏Android Activity?
实现带通知栏样式的全屏Activity(沉浸式状态栏)
你之前用的FLAG_FULLSCREEN是完全隐藏状态栏的,这就是为什么不符合需求。要实现「全屏但保留通知栏样式」,其实就是Android里的沉浸式状态栏(透明状态栏)——让应用内容延伸到状态栏下方,同时状态栏保持可见且样式适配。下面分几种实用场景给你方案:
方案1:代码动态设置(单Activity适配)
在目标Activity的onCreate方法里,放在setContentView之前执行这段代码:
// 设置状态栏为透明 getWindow().setStatusBarColor(Color.TRANSPARENT); // 让页面内容延伸覆盖到状态栏区域,同时保持布局稳定 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
如果你的页面背景偏浅,需要把状态栏文字改成深色(避免看不清),可以针对Android 6.0+版本额外添加配置:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR // 开启深色状态栏文字 ); } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ); }
方案2:主题样式配置(全局/多Activity适配)
如果想让多个Activity统一用这个样式,更推荐通过主题配置实现。在res/values/styles.xml里定义专属主题:
<style name="MusicAppFullscreenTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 设置状态栏透明 --> <item name="android:statusBarColor">@android:color/transparent</item> <!-- 允许内容延伸到状态栏,同时适配刘海屏 --> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> <item name="android:windowTranslucentStatus">true</item> <!-- 可选:开启深色状态栏文字(Android 6.0+生效) --> <item name="android:windowLightStatusBar">true</item> </style>
然后在AndroidManifest.xml里给目标Activity绑定这个主题:
<activity android:name=".YourMusicPlayActivity" android:theme="@style/MusicAppFullscreenTheme"> </activity>
小提示
如果你的布局顶部有Toolbar或导航栏控件,记得给它加上android:fitsSystemWindows="true",这样控件会自动避开状态栏区域,避免内容被状态栏遮挡。
内容的提问来源于stack exchange,提问作者Binh Cao
相关产品推荐
相关产品推荐

