Pixel 6升级Android 15后边到边模式隐藏顶部TextView,如何解决?
解决Android 15边到边模式导致内容遮挡/系统栏不显示的问题
一、直接禁用边到边模式
如果不需要边到边显示效果,可在Activity的onCreate方法中直接关闭该模式:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 恢复系统栏默认行为,禁用边到边模式 WindowCompat.setDecorFitsSystemWindows(window, true) setContentView(R.layout.activity_main) }
Java版本:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WindowCompat.setDecorFitsSystemWindows(getWindow(), true); setContentView(R.layout.activity_main); }
二、保留边到边模式同时修复问题
若想保留边到边效果,需同时处理系统栏可见性和内容内边距:
- 强制显示系统栏并配置样式
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val insetsController = WindowCompat.getInsetsController(window, window.decorView) // 显示状态栏 insetsController.show(WindowInsetsCompat.Type.statusBars()) // 如需显示导航栏可添加此行 insetsController.show(WindowInsetsCompat.Type.navigationBars()) // 根据背景设置状态栏图标颜色(true为深色图标,false为浅色) insetsController.isAppearanceLightStatusBars = true }
- 给布局添加内边距避免内容被遮挡
可在布局根View中添加静态内边距:
android:paddingTop="?android:attr/statusBarHeight"
或用动态Insets适配:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.root_layout)) { view, insets -> val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars()) view.setPadding(0, statusBarInsets.top, 0, 0) insets }
三、检查主题配置
确认Activity主题未强制隐藏系统栏,打开styles.xml移除相关属性:
<style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar"> <!-- 移除以下可能导致系统栏隐藏的属性 --> <!-- <item name="android:windowFullscreen">true</item> --> <!-- <item name="android:windowTranslucentStatus">true</item> --> </style>
内容的提问来源于stack exchange,提问作者Style-7
相关产品推荐
相关产品推荐

