如何在Android设备上通过代码获取设备支持的最大允许显示尺寸
Android获取设备支持的最大显示尺寸档位解决方案
Android的显示尺寸档位本质是系统预置的一组密度缩放比例,对应不同的densityDpi值,档位越高数值越大,我们只需要拿到设备所有支持的densityDpi值取最大值即可。
方案1:公开API读取(适用Android 11及以上)
从Android 11开始,系统提供了获取所有支持的显示密度的接口,直接通过DisplayManager获取:
// 上下文获取DisplayManager DisplayManager displayManager = getSystemService(DisplayManager.class); Display display = displayManager.getDisplay(Display.DEFAULT_DISPLAY); Display.Mode[] supportedModes = display.getSupportedModes(); int maxDensityDpi = 0; for (Display.Mode mode : supportedModes) { if (mode.getPhysicalDensityDpi() > maxDensityDpi) { maxDensityDpi = mode.getPhysicalDensityDpi(); } } // maxDensityDpi即为最大档位对应的密度值
如果需要映射成厂商的档位命名(如Large/Largest),可以和当前系统的档位密度做对比,通常档位间隔是统一的,按比例计算即可。
方案2:读取系统预置档位配置(兼容大部分Android版本)
厂商会把支持的显示尺寸档位预置在系统配置文件中,可以通过Resources读取系统配置:
Resources sysRes = Resources.getSystem(); // 读取系统预置的显示尺寸缩放比例数组 int resId = sysRes.getIdentifier("config_display_size_scales", "array", "android"); if (resId != 0) { float[] scales = sysRes.getFloatArray(resId); // 数组按从小到大排列,最后一个就是最大档位的缩放比例 float maxScale = scales[scales.length - 1]; // 结合默认density计算最大档位对应的densityDpi int defaultDensity = DisplayMetrics.DENSITY_DEVICE_STABLE; int maxDensityDpi = Math.round(defaultDensity * maxScale); }
注意:部分厂商会修改配置项的命名,如果读取不到上述配置,可以尝试读取
config_density_scales数组,逻辑一致。
方案3:读取Settings数据库配置(兼容小米、华为等主流厂商)
大部分厂商会把支持的档位存在Settings.Secure数据库中,可直接读取:
// 获取支持的档位值列表,返回格式为逗号分隔的densityDpi值 String supportedDensities = Settings.Secure.getString(getContentResolver(), "display_size_supported_densities"); if (supportedDensities != null && !supportedDensities.isEmpty()) { String[] densityArr = supportedDensities.split(","); int maxDensityDpi = 0; for (String densityStr : densityArr) { int density = Integer.parseInt(densityStr.trim()); if (density > maxDensityDpi) { maxDensityDpi = density; } } }
这个方法不需要额外权限,普通应用即可调用,适配率可达90%以上的主流设备。
常见问题说明
- 之前用
DisplayMetrics只能拿到默认值的原因是DisplayMetrics返回的是当前正在生效的配置,不是设备支持的所有可选配置 - 上述三个方案普通三方应用都可以直接使用,不需要申请特殊权限
- 部分定制ROM如果修改了系统配置存储路径,可以优先用方案3适配,主流厂商都支持该配置项
内容的提问来源于stack exchange,提问作者AKS
相关产品推荐
相关产品推荐

