API 35中如何让布局元素避开状态栏?禁用Edge-to-Edge或设上边距
API 35 布局元素被状态栏遮挡的两种有效解决方案
方案一:禁用Edge-to-Edge模式
- 直接移除Activity中启用Edge-to-Edge的核心代码,系统会自动让布局避开状态栏区域:
// 删除或注释掉这行启用edge-to-edge的代码 // WindowCompat.setDecorFitsSystemWindows(window, false) - 若之前有设置系统UI相关的调整代码(比如修改状态栏颜色、UI可见性的额外配置),也同步移除,确保布局默认适配状态栏间距。
方案二:动态设置MarginTop适配状态栏高度
正确获取状态栏高度
避免硬编码24dp(不同设备状态栏高度可能有差异),通过系统资源获取更准确:
val statusBarHeight = resources.getIdentifier("status_bar_height", "dimen", "android").takeIf { it > 0 } ?.let { resources.getDimensionPixelSize(it) } ?: (resources.displayMetrics.density * 24F).toInt()
动态设置View的MarginTop
不要直接修改View.top(会覆盖布局参数),通过LayoutParams修改:
val params = myButton.layoutParams as ViewGroup.MarginLayoutParams params.topMargin = statusBarHeight myButton.layoutParams = params
注意:
@*android:dimen/status_bar_height属于系统私有资源,高版本API中无法直接引用,因此这种方式无效,必须用代码动态获取高度后设置。
内容的提问来源于stack exchange,提问作者ngro
相关产品推荐
相关产品推荐

