升级Target SDK至35并调用enableEdgeToEdge()后仍无法实现全面屏
全面屏显示异常排查方案(Fragment + Jetpack Compose 架构)
1. 核对主题配置
确保App主题继承自无ActionBar的Material3主题(如Theme.Material3.DayNight.NoActionBar),并在styles.xml/theme.xml中添加以下属性:
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item>
若使用Compose主题,避免在MaterialTheme中覆盖窗口相关配置。
2. 确认enableEdgeToEdge()调用时机
- Activity中调用:必须在
setContent之前执行:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() // 此步骤要在setContent前 setContent { YourAppTheme { // Compose界面内容 } } } }
- Fragment中调用:在
onViewCreated内执行,确保Fragment视图已初始化:
class HomeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) requireActivity().enableEdgeToEdge() // 也可直接设置窗口标记兜底 requireActivity().window.setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS ) } }
3. 适配Compose内容内边距
启用edge-to-edge后,状态栏/导航栏会覆盖Compose内容,需添加内边距适配:
setContent { YourAppTheme { val windowInsets = WindowInsets.systemBars.asPaddingValues() Box( modifier = Modifier .fillMaxSize() .padding(windowInsets) ) { // 你的Compose界面内容 } } }
Fragment中的Compose内容同理,需获取当前窗口insets添加padding。
4. 检查Manifest与Gradle配置
AndroidManifest.xml中确保无android:resizeableActivity="false",并添加:
<meta-data android:name="android.max_aspect" android:value="2.1" />
- 确认Gradle中
targetSdkVersion确实设置为35:
android { defaultConfig { targetSdk = 35 } }
5. 排查第三方库/自定义View干扰
部分第三方UI库或自定义View可能修改窗口布局参数,可暂时移除第三方库测试,或检查自定义View的LayoutParams是否强制限制了布局边界。
内容的提问来源于stack exchange,提问作者Jaloliddin Gulomov
相关产品推荐
相关产品推荐

