如何让Android应用实现全屏?无需AppCompat且避免状态栏黑边
解决原生Material主题全屏状态栏黑边问题
一、无黑边全屏实现(不依赖AppCompat)
你之前的问题是android:windowTranslucentStatus和android:windowFullscreen同时启用导致的冲突,调整主题配置再结合版本适配代码即可解决:
- 修改
style.xml配置,移除冲突属性:
<resources> <style name="AppDefaultTheme" parent="@android:style/Theme.Material.NoActionBar"> <item name="android:windowFullscreen">true</item> <!-- 移除半透明状态栏属性,避免和全屏模式冲突 --> <item name="android:windowTranslucentStatus">false</item> <!-- 禁止绘制系统栏背景,消除黑边 --> <item name="android:windowDrawsSystemBarBackgrounds">false</item> </style> </resources>
- 在Activity的
onCreate方法中添加版本适配代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 适配Android 11及以上版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); WindowInsetsController insetsController = getWindow().getInsetsController(); if (insetsController != null) { // 隐藏状态栏 insetsController.hide(WindowInsets.Type.statusBars()); // 允许滑动手势唤起状态栏 insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } } else { // 适配Android 10及以下版本 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); } setContentView(R.layout.activity_main); }
二、隐藏状态栏图标(无需全屏)
如果只是想隐藏状态栏的信号、电量等图标,而非整个状态栏,可以用以下方法:
- Android 10及以下:
在Activity中添加代码:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
- Android 11及以上:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { WindowInsetsController insetsController = getWindow().getInsetsController(); if (insetsController != null) { // 设置低模式,状态栏图标会变成灰色小图标 insetsController.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LOW_PROFILE, WindowInsetsController.APPEARANCE_LOW_PROFILE); } }
注意:低模式下用户点击或滑动状态栏时,图标会恢复正常显示状态。
内容的提问来源于stack exchange,提问作者user13776577
相关产品推荐
相关产品推荐

