如何在Xamarin中将DPI设备获取到PCL。形式? - 跟进

时间:2019-07-25 11:16:00

标签: forms xamarin dpi

使用Xamarin Forms Visual Studio 2019。

我需要获取设备的DPI。

此帖子有一个解决方案: How to get DPI device to PCL in Xamarin. Forms?

实施解决方案带来了问题:

应用上面的答案时,我收到此错误消息:

  

找不到类型或名称空间名称'DependencyAttribute'   (您是否缺少using指令或程序集引用?)

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

[assembly: Dependency(typeof(DisplayInfo))]
namespace .....

-我通过替换为解决了该编译器问题: 使用Xamarin.Essentials;

[assembly: Xamarin.Forms.Dependency(typeof(DisplayInfo))]

但是,当我编译并运行代码时,当我尝试在Xamarin Core代码中使用它时,它就会崩溃:

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

我在上一行收到此运行时错误:

  

System.NullReferenceException:对象引用未设置为实例   一个对象

有什么想法吗?我会将这个问题添加为对原始问题的评论,但是作为新用户,他们没有做这些事情的要点...如果有人可以对原始问题的解决方案发表评论,将其指向该URL,那也会有所帮助

1 个答案:

答案 0 :(得分:-1)

所以我自己的问题的答案:

最初提供的解决方案说做到这一点:

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

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

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

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

我在初始化此类的Android代码中没有看到任何问题,我不确定如何最好地做到这一点。

因此,我遵循了直接在Android MainActivity.cs文件中实现该界面的指导,并且该方法可以正常工作。.我观看的视频对此有帮助:

https://www.youtube.com/watch?v=lgcnYDb6cRQ&t=19s

相关问题