首页 > 解决方案 > 如何在 Xamarin 中将 DPI 设备获取到 PCL。形式?

问题描述

我需要在我的 Xamarin 类 PCL 中获取 DPI 设备。我不想使用 Xamarin.Essentials。我可以使用本机接口来做到这一点,如果可能的话,我该怎么做?

标签: xamarinxamarin.forms

解决方案


在您的 pcl 中创建一个名为 IDisplayInfo 的新接口:

public interface IDisplayInfo
{
    int GetDisplayWidth();
    int GetDisplayHeight();
    int GetDisplayDpi();
}

在您的 android 实现中,添加一个新类:

[assembly: Dependency(typeof(DisplayInfo))]
namespace YourAppNamespace.Droid
{
    public class DisplayInfo : IDisplayInfo
    {
        public int GetDisplayWidth()
        {
            return (int)Android.App.Application.Context.Resources.DisplayMetrics.WidthPixels;
        }

        public int GetDisplayHeight()
        {
            return (int)Android.App.Application.Context.Resources.DisplayMetrics.HeightPixels;
        }

        public int GetDisplayDpi()
        {
            return (int)Android.App.Application.Context.Resources.DisplayMetrics.DensityDpi;
        }
    }
}

并在 iOS 实现中,添加相同的类:

[assembly: Dependency(typeof(DisplayInfo))] 
namespace YourNamespace.iOS
{
    public class DisplayInfo : IDisplayInfo
    {
        public int GetDisplayWidth()
        {
            return (int)UIScreen.MainScreen.Bounds.Width;
        }

        public int GetDisplayHeight()
        {
            return (int)UIScreen.MainScreen.Bounds.Height;
        }

        public int GetDisplayDpi()
        {
            return (int)(int)UIScreen.MainScreen.Scale;
        }
    }
}

现在在您的共享代码中,您可以调用

int dpi = DependencyService.Get<IDisplayInfo>().GetDisplayDpi();

应该很好去。请注意,我还添加了获取屏幕宽度和高度的方法,主要是因为我的代码中已经有了它们,而且你可能迟早会需要它们。


推荐阅读