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

如何在带刘海屏的Android设备上实现ExoPlayer全屏显示

ExoPlayer刘海屏全屏显示配置调整方案

现有配置的核心问题出在布局的fitsSystemWindows属性限制了布局延伸到系统状态栏/刘海区域,结合以下调整即可实现真正全屏:

1. 调整布局属性

将根布局RelativeLayout的android:fitsSystemWindows属性从true改为false,该属性设为true时会自动为布局添加状态栏高度的内边距,阻碍布局延伸到刘海区域。修改后的根布局配置如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    android:id="@+id/videoPlayerContainer"
    android:background="@android:color/black"  >
<!-- 其余子布局保持不变 -->

2. 补充主题配置

你已添加基础刘海屏适配属性,补充透明系统栏配置即可,修改后的AppTheme如下:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- 刘海屏适配 -->
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    <!-- 新增透明系统栏配置 -->
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
</style>

3. Activity代码添加沉浸式配置

在播放页Activity的onCreate方法中添加以下代码,强制允许布局延伸到刘海区域,同时开启沉浸模式:

Kotlin 示例

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN
        or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)

Java 示例

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    getWindow().setAttributes(params);
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

4. 可选:调整ExoPlayer缩放模式

如果不需要拉伸视频,可将PlayerView和AspectRatioFrameLayout的app:resize_mode从fill改为zoom,该模式会裁剪视频多余部分保持原比例,同时铺满整个屏幕(包括刘海区域),避免画面变形。

调整完成后重新运行测试,即可看到播放器界面延伸到刘海区域实现真正全屏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:45:01