如何获取竖屏模式下用户可见的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




