我正在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设备(小型,中型和大型)?
答案 0 :(得分:0)
您要查找的内容很容易在本机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";
}
}
答案 1 :(得分:0)
在特定设备中标签文本被截断(对于我而言)或元素没有足够空间的原因是,使用密度(dpi / ppi)和密度桶对元素进行的实际像素计算屏幕落入。本文为计算不同显示密度的元素的物理尺寸提供了一个好主意。
经过详尽的研究,我能够通过结合屏幕宽度像素和密度来对设备屏幕进行分类。 (我从Android开发者网站Distribution dashboard和Support different screen sizes获得了数据)
我将屏幕宽度像素分为四类,然后使用以下公式计算每种显示密度的屏幕尺寸:
sqrt((widthPixels x widthPixels) + (heightPixels x heightPixels)) / density
然后,我在GSMArena中进行了搜索,以找到具有上表中的屏幕配置的设备。屏幕尺寸小于3英寸的大多数是智能手表,大于8英寸的可能是Tab和智能电视。因此,我将屏幕尺寸在3-8英寸之间的设备用作移动设备。