You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取竖屏模式下用户可见的Android屏幕宽度?

获取竖屏模式下用户可见的屏幕宽度

嘿,我懂你要的是用户实际能看到的屏幕宽度——毕竟现在不少手机有刘海、挖孔或者系统导航栏,这些都会占用一部分屏幕空间,单纯拿系统完整分辨率肯定不对。下面给你两种场景下的解决方案:

在Activity中获取可见宽度

如果你的代码是在Activity里调用,最准确的方式是获取当前窗口的可见显示区域,这个区域会自动排除状态栏、导航栏以及屏幕异形区域的占用:

public static int getVisibleScreenWidth(Activity activity) {
    Rect visibleFrame = new Rect();
    // 获取DecorView的可见区域
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(visibleFrame);
    // 竖屏模式下,visibleFrame.width()就是用户可见的横向宽度
    return visibleFrame.width();
}

在非Activity环境(如Application/Service)中获取可见宽度

如果是在没有Activity的场景下,可以通过WindowManager获取应用可用的屏幕尺寸,这个尺寸同样会排除系统UI的占用:

public static int getVisibleScreenWidth(Context context) {
    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    if (windowManager == null) {
        return 0; // 兜底返回,避免空指针
    }
    Display display = windowManager.getDefaultDisplay();
    Point usableSize = new Point();
    // getSize()返回应用可用的屏幕尺寸,而非完整分辨率
    display.getSize(usableSize);
    // 竖屏时usableSize.x就是可见宽度
    return usableSize.x;
}

补充说明

你之前用的Resources.getSystem().getDisplayMetrics().widthPixels返回的是完整屏幕分辨率,包含了状态栏、导航栏等系统UI占用的区域,所以才会和你需要的可见宽度有差异。上面的两种方法都会自动适配各种屏幕形态,返回用户实际能看到的内容区域宽度。

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

火山引擎 最新活动