You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何让应用在华为Mate 10 Pro及18:9比例手机全屏显示?

搞定18:9比例手机(如华为Mate 10 Pro)的全屏显示

你已经尝试了基础的全屏设置,但针对这类全面屏机型,还需要适配系统的专属规则,下面给你几个实用的方案:

1. 先适配Android官方全面屏规范

从Android 8.0(API 26)开始,官方明确支持宽屏适配,你只需要在AndroidManifest.xml里加一行配置,告诉系统你的应用支持更高的屏幕宽高比:

<meta-data
    android:name="android.max_aspect"
    android:value="2.1" /> <!-- 18:9的比例是2.0,设2.1能兼容更宽的屏幕 -->

这一步很关键,很多时候就是因为没加这个配置,系统才限制应用在18:9屏幕上的显示范围。

2. 优化Window Flags的设置

你之前用的FLAG_LAYOUT_IN_SCREENFLAG_LAYOUT_NO_LIMITS可以保留,但建议结合沉浸式全屏的系统UI标志,同时处理状态栏/导航栏的遮挡问题:

// 要在setContentView之前调用哦
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 先让布局延伸到状态栏和导航栏区域
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
// 如果需要彻底隐藏状态栏和导航栏,用沉浸式模式
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

SYSTEM_UI_FLAG_IMMERSIVE_STICKY是个好东西,用户滑动屏幕边缘时状态栏会临时弹出来,松手后又自动隐藏,体验很顺畅。

3. 针对华为机型的特殊适配

华为有自己的全屏触发逻辑,你可以尝试调用它的系统属性(记得先判断品牌):

public void enableHuaweiFullScreen() {
    if (Build.BRAND.equalsIgnoreCase("huawei")) {
        try {
            Class<?> cls = Class.forName("android.os.SystemProperties");
            Method setMethod = cls.getMethod("set", String.class, String.class);
            setMethod.invoke(null, "sys.hw_fullscreen", "1");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

不过这个方法需要系统权限,部分机型可能用不了,所以优先用前面的官方方案。

4. 检查主题配置的完整性

你之前的主题设置要确保正确应用到目标Activity上,比如在styles.xml里定义专属的全屏主题:

<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

然后在AndroidManifest.xml里给需要全屏的Activity指定这个主题:

<activity
    android:name=".YourFullScreenActivity"
    android:theme="@style/FullScreenTheme"/>

最后提醒一句:测试时要确保布局根元素没有设置固定宽高,尽量用match_parent,不然就算系统允许全屏,布局也会被限制住。

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

火山引擎 最新活动