我正在开发一个Xamarin.Forms应用程序,我需要确定android屏幕/分辨率是小,中,大是用可用空间调整一些内容。例如,某些标签(单行)在较小的设备中被截断。如果分辨率较小或者没有,我可以做一些调整。
在iOS中,当iPhone屏幕越来越大时,分辨率也越来越高,因此很容易识别iOS中的小分辨率设备。但在android中,这似乎很难。
Android设备分辨率可以从
var resolutionH = Resources.DisplayMetrics.HeightPixels;
var resolutionW = Resources.DisplayMetrics.WidthPixels;
为了进行测试,我创建了以下模拟器并在其中运行应用程序。这是我的结果是否标签被截断。
Resolution Density Result
---------------------------
2560x1440 560 OK
1920x1080 400 OK
1280x720 320 Truncated
1280x720 280 OK
1280x720 240 OK
800x480 240 Truncated
800x480 160 OK
这里的问题是具有更高分辨率和更低DPI的设备不会导致任何问题。像具有1280x720分辨率和240 DPI(或280 DPI)的设备。由于有大量Android设备可用,具有不同的分辨率和密度,这个问题似乎更难。
有没有更好的方法来分类Android设备(小型,中型和大型)?
你在寻找什么是很容易在本机android你可以创建一个方法,并检查DensityMetricsDensity
如下所示:
private string GetDeviceDensity()
{
var density = Resources.DisplayMetrics.DensityDpi;
switch (density)
{
case DisplayMetricsDensity.Medium:
return "MDPI";
case DisplayMetricsDensity.High:
return "HDPI";
case DisplayMetricsDensity.Low:
return "LDPI";
case DisplayMetricsDensity.Xhigh:
return "XHDPI";
case DisplayMetricsDensity.Tv:
return "TV";
case DisplayMetricsDensity.Xxhigh:
return "XXHDPI";
case DisplayMetricsDensity.Xxxhigh:
return "XXXHDPI";
default:
return "Unknown";
}
}
标签的文本被截断(在我的情况下)或元素在特定设备中没有获得足够空间的原因是,使用密度(dpi / ppi)的元素的实际像素计算和屏幕下降的密度桶成。本文为计算不同显示密度的元素的物理尺寸提供了一个好主意。
经过一些疲惫的研究,我能够通过屏幕宽度像素和密度的组合对设备屏幕进行分类。 (我从Android开发者网站Distribution dashboard和Support different screen sizes获得了数据)
我已将屏幕宽度像素分为4类,然后使用以下公式计算每个显示密度的屏幕大小:
sqrt((widthPixels x widthPixels) + (heightPixels x heightPixels)) / density
然后我在GSMArena中搜索了上表中有屏幕配置的设备。屏幕尺寸低于3英寸主要是智能手表,超过8英寸可能是标签和智能电视。所以我采用屏幕尺寸在3-8英寸之间的设备作为移动设备。