xamarin - 如何在 Xamarin 中将 DPI 设备获取到 PCL。形式?
问题描述
我需要在我的 Xamarin 类 PCL 中获取 DPI 设备。我不想使用 Xamarin.Essentials。我可以使用本机接口来做到这一点,如果可能的话,我该怎么做?
解决方案
在您的 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();
应该很好去。请注意,我还添加了获取屏幕宽度和高度的方法,主要是因为我的代码中已经有了它们,而且你可能迟早会需要它们。
推荐阅读
- macos - 沙箱下的 NSOpenPanel - 访问用户选定文件夹中的所有文件
- entity-framework - EFCore, Is it possible to generate migration script without startup project?
- python - 将 ndarray 从 float32 转换为 uint8 会使图像混乱
- java - 在播放框架中注入具有多个实现的接口
- windows - Docker on Windows: failed: container_linux.go:344: starting container process caused "exec: \"./gradlew\": stat ./gradlew: no such file or directory"
- excel - Formating Cells to only display characters after X number of Characters
- reactjs - react 的性能问题有什么不同的 styled(component) 和 styled(tagname)?
- android - 如何从 androidx 支持库中使用 webkit
- javascript - 调用 Node.appendChild() 添加脚本标签时会发生什么?
- git - 如何从 git commit 中删除受限文件?