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

Android Studio应用横屏模式前置摄像头旁黑条问题求助

Android横屏模式前置摄像头区域黑条问题解决方法

问题分析

竖屏模式下调用EdgeToEdge.enable(this)能消除黑条,但横屏时前置摄像头附近仍存在黑条,核心原因是横屏场景下系统窗口Insets(包括刘海/打孔屏区域)未被正确适配,EdgeToEdge默认逻辑未覆盖横屏的Insets处理。

解决方案

方案1:手动监听WindowInsets,适配布局延伸

在Activity的onCreate方法中,给根布局设置WindowInsets监听器,让布局背景延伸到黑条区域,同时调整内容padding避免被遮挡:

package com.example.myapplication;
import android.os.Bundle;
import android.view.WindowInsets;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EdgeToEdge.enable(this);
        
        // 获取根布局
        ConstraintLayout rootLayout = findViewById(R.id.main);
        // 处理WindowInsets,让布局延伸到系统区域
        rootLayout.setOnApplyWindowInsetsListener((view, insets) -> {
            // 获取系统栏+打孔屏的Insets
            WindowInsets edgeInsets = insets.getInsets(WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout());
            // 设置padding,保证内容不被系统栏/摄像头遮挡,同时背景铺满
            view.setPadding(edgeInsets.left, edgeInsets.top, edgeInsets.right, edgeInsets.bottom);
            return insets.consumeSystemWindowInsets();
        });
    }
}

方案2:修改主题属性,强制布局延伸到打孔区域

在res/values/styles.xml的App主题中添加以下属性,允许布局覆盖刘海/摄像头区域,同时隐藏系统栏:

<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
    <!-- 原有属性保留,新增以下两行 -->
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    <item name="android:windowFullscreen">true</item>
</style>
  • windowLayoutInDisplayCutoutMode="shortEdges":允许布局延伸到屏幕短边的打孔/刘海区域(横屏时前置摄像头在短边)
  • windowFullscreen="true":隐藏状态栏和导航栏,配合EdgeToEdge实现全屏无黑条

方案3:检查Activity配置,避免横屏重建异常

在AndroidManifest.xml中给目标Activity添加configChanges属性,避免横屏切换时Activity重建导致适配失效:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

验证方法

修改后运行应用,切换到横屏模式,检查前置摄像头区域的黑条是否被布局背景(示例中的绿色)覆盖,同时确保界面内容不会被摄像头遮挡。

内容的提问来源于stack exchange,提问作者Назар Чиж

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:31:20