MAUI如何获取屏幕的宽度和高度 MAUI DeviceDisplay教程

最推荐方式是使用Microsoft.Maui.Devices.DeviceDisplay类获取屏幕宽高:Width/Height返回物理像素值,随旋转实时变化;结合Density可换算为逻辑单位dp;通过MainDisplayInfoChanged事件监听尺寸变化;安全区域需平台特异性处理。

在 MAUI 中获取屏幕宽度和高度,最推荐、最可靠的方式是使用 Microsoft.Maui.Devices.DeviceDisplay 类。它能返回设备当前的屏幕尺寸(单位:像素)、密度、安全区域等关键信息,且跨平台兼容 iOS、Android、Windows 和 macOS。

获取屏幕原始像素宽高(推荐)

DeviceDisplay.MainDisplayInfo.WidthHeight 可拿到主屏幕的**物理像素尺寸**,注意这是未缩放的原始值,受系统缩放(如 Windows 的 125% 缩放)或字体大小设置影响较小:

  • Width / Height 返回的是整型像素值(int),例如 Android 手机可能返回 1080 × 2400
  • 该值会随横竖屏旋转实时变化,适合做响应式布局判断
  • 需确保在 UI 线程调用(MAUI 中通常默认满足)

换算成与密度无关的逻辑单位(dp / DIP)

若需适配不同屏幕密度(比如设计稿按 360dp 宽度基准),可结合 MainDisplayInfo.Density 换算:

  • 逻辑宽度(dp)≈ MainDisplayInfo.Width / MainDisplayInfo.Density
  • 逻辑高度(dp)≈ MainDisplayInfo.Height / MainDisplayInfo.Density
  • 例如:1080px 宽 + 密度 3.0 → 约 360dp,正好匹配常见设计基准

监听屏幕方向或尺寸变化

当用户旋转设备或窗口大小改变(桌面端),可通过订阅 DeviceDisplay.MainDisplayInfoChanged 事件响应:

  • 在页面初始化或 ViewModel 中注册:DeviceDisplay.MainDisplayInfoChanged += OnDisplayInfoChanged;
  • 回调中重新读取 Width/Height,更新布局或刷新网格列数
  • 记得在页面销毁时取消订阅,避免内存泄漏

注意安全区域(尤其是 iPhone 和全面屏 Android)

DeviceDisplay 不直接提供安全区域(Safe Area),但它是布局适配的关键。如需避开刘海/圆角/手势条:

  • iOS/macOS:用 Application.Current.Windows[0].SafeArea 获取 Thickness
  • Android:目前需通过平台特定代码(Platform.CurrentActivity?.Window?.DecorView)或社区库辅助
  • 建议将屏幕尺寸 + 安全区域结合使用,比如设置内容区域内边距

基本上就这些。用好 DeviceDisplay.MainDisplayInfo 能覆盖绝大多数屏幕适配场景,不复杂但容易忽略密度换算和事件监听这两个关键点。