如何确定android设备的分辨率是小型、中型还是大型

如何确定android设备的分辨率是小型、中型还是大型,android,xamarin.forms,xamarin.android,Android,Xamarin.forms,Xamarin.android,我正在开发一个Xamarin.Forms应用程序,我需要确定android屏幕/分辨率是小、中还是大,以便根据可用空间调整一些内容。例如,一些标签(单行)在较小的设备中被截断。因此,如果分辨率较小或不较小,我可以进行一些调整 在iOS中,当iPhone屏幕越来越大时,分辨率也越来越高,因此很容易在iOS中识别分辨率较小的设备。但在安卓系统中,这似乎很难做到 Android设备分辨率可以从 var resolutionH = Resources.DisplayMetrics.HeightPixel

我正在开发一个Xamarin.Forms应用程序,我需要确定android屏幕/分辨率是小、中还是大,以便根据可用空间调整一些内容。例如,一些标签(单行)在较小的设备中被截断。因此,如果分辨率较小或不较小,我可以进行一些调整

在iOS中,当iPhone屏幕越来越大时,分辨率也越来越高,因此很容易在iOS中识别分辨率较小的设备。但在安卓系统中,这似乎很难做到

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中,您可以创建一个方法并检查
densitymetricdensity
如下所示:

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开发者网站上获得了数据,并且)

我将屏幕宽度像素分为4类,然后使用以下公式计算每个显示密度的屏幕大小:

sqrt((widthPixels x widthPixels) + (heightPixels x heightPixels)) / density


然后,我在中搜索,以查找具有上表中屏幕配置的设备。屏幕尺寸低于3英寸的大多是智能手表,超过8英寸的可能是标签和智能电视。因此,我将屏幕尺寸在3-8英寸之间的设备作为移动设备(智能手机)。

您可以看到,在经过测试的仿真器列表中,240dpi和280dpi设备属于HDPI范围。分辨率为1280x720的设备不会产生问题,因为它具有更高的分辨率,但800x480分辨率会产生问题。800 x 400此设备是横向还是横向?所有提到的设备都是纵向的。为什么不检查显示指标,如果是800x400,则根据实际情况做些不同的事情,我正在寻找一个更普遍的解决办法。