You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

横屏模式下如何为UI添加内边距以避开显示刘海区域?

屏幕截图:带刘海/挖孔的显示效果

我希望底部导航栏保持原有长度不变,同时给左侧的容器添加内边距,让卡片向右偏移一些。当前我的MainActivity.kt中有如下代码:

WindowCompat.setDecorFitsSystemWindows(window, false)
    ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
        val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
        view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
            topMargin = insets.top
        }
        binding.bottomNavigationView.updatePadding(bottom = insets.bottom)
        WindowInsetsCompat.CONSUMED
    }

我的activity_main.xml由一个ConstraintLayout构成,其中包含两个元素:BottomNavigationView和FragmentContainerView。


解决方案

要实现需求,只需在现有WindowInsets处理逻辑中,给FragmentContainerView添加左侧内边距即可,底部导航栏的处理逻辑保持不变:

WindowCompat.setDecorFitsSystemWindows(window, false)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
    val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
    view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
        topMargin = insets.top
    }
    // 给左侧容器添加内边距,调整偏移量(示例用16dp,可按需修改)
    binding.fragmentContainerView.updatePadding(left = dpToPx(16))
    binding.bottomNavigationView.updatePadding(bottom = insets.bottom)
    WindowInsetsCompat.CONSUMED
}

// 辅助函数:dp转px
private fun dpToPx(dp: Int): Int {
    return (dp * resources.displayMetrics.density).toInt()
}

如果需要适配挖孔/刘海屏幕,让卡片自动避开系统显示区域,可以改用显示挖孔的内边距:

WindowCompat.setDecorFitsSystemWindows(window, false)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
    val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
    view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
        topMargin = insets.top
    }
    // 获取挖孔区域的左侧内边距,自动适配偏移
    val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
    binding.fragmentContainerView.updatePadding(left = cutoutInsets.left)
    binding.bottomNavigationView.updatePadding(bottom = insets.bottom)
    WindowInsetsCompat.CONSUMED
}

这样既不会改变底部导航栏的长度,又能让左侧容器内的卡片向右偏移到你需要的位置。

内容的提问来源于stack exchange,提问作者dem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:50:50