Android设置NoActionBar主题后ActionBar仍为灰色该如何解决?
解决方案
- 确认Activity继承类型
你当前使用的是AppCompat主题,对应Activity必须继承AppCompatActivity,如果继承的是系统原生Activity,主题配置不会生效。 - 自定义全屏主题
Theme.AppCompat.Light.NoActionBar仅隐藏标题栏,不会处理顶部状态栏和底部系统导航栏,你看到的灰色区域大概率是未适配的状态栏。可以在res/values/styles.xml中新增自定义全屏主题:
<style name="VideoPlayerFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 隐藏状态栏 --> <item name="android:windowFullscreen">true</item> <!-- 状态栏透明 --> <item name="android:statusBarColor">@android:color/transparent</item> <!-- 底部导航栏透明 --> <item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> </style>
之后修改AndroidManifest中对应Activity的theme配置为:
android:theme="@style/VideoPlayerFullScreenTheme"
- 检查布局属性
如果布局根节点设置了android:fitsSystemWindows="true",会自动在顶部预留状态栏高度的空白区域,将该属性删除或设置为false即可。 - 代码动态开启沉浸模式
视频播放器适合使用沉浸全屏模式,在MainActivity的onCreate方法中添加如下代码,滑动边缘才会临时显示系统栏:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); WindowInsetsController insetsController = getWindow().getInsetsController(); if (insetsController != null) { insetsController.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ); }
问题场景参考:
内容的提问来源于stack exchange,提问作者user10991969
相关产品推荐
相关产品推荐


