C# 单机器人密度dpi到Int
我需要将DensityDpi转换为Int。我尝试如下:C# 单机器人密度dpi到Int,c#,xamarin,xamarin.android,C#,Xamarin,Xamarin.android,我需要将DensityDpi转换为Int。我尝试如下: int dens = dm.DensityDpi; 当然,这是行不通的。完整的代码是: DisplayMetrics dm = new DisplayMetrics(); WindowManager.DefaultDisplay.GetMetrics(dm); int width = dm.WidthPixels; int height = dm.HeightPixels; int dens = dm.DensityDpi; double
int dens = dm.DensityDpi;
当然,这是行不通的。完整的代码是:
DisplayMetrics dm = new DisplayMetrics();
WindowManager.DefaultDisplay.GetMetrics(dm);
int width = dm.WidthPixels;
int height = dm.HeightPixels;
int dens = dm.DensityDpi;
double wi = (double)width / (double)dens;
double hi = (double)height/(double)dens;
double x = Math.Pow(wi,2);
double y = Math.Pow(hi,2);
double screenInches = Math.Sqrt(x+y);
我在努力寻找屏幕的那一寸
考虑到有证据表明常数是int,我不知道为什么它不起作用。
( )
我认为这是同样的事情。对于Android:
var metrics = new DisplayMetrics();
this.WindowManager.DefaultDisplay.GetMetrics(metrics);
private const float INCH = 25.4f;
var ydpi = metrics.Ydpi; // dpi in vertical direction
var xdpi = metric.Xdpi; // dpi in horizontal direction
var pHeight = metrics.HeightPixels; // total pixels in vertical direction
var pWidth = metrics.WidthPixels; // total pixels in horizontal direction
var iHeight = (pHeight / ydpi); // screenheight in inches
var iWidth = (pWidth / xdpi); // screenwidth in inches
var mHeight = (pHeight / ydpi) * INCH; // screenheight in millimeters
var mWidth = (pWidth / xdpi) * INCH; // screenwidth in millimeters
抱歉,无法直接查询iOS设备的DPI
但是,您可以使用一些常量来计算它。iPhone的ppi是163,而iPhone视网膜的ppi是这一数字的两倍
private const float INCH = 25.4f;
var ppi = 163 * UIScreen.MainScreen.Scale; // pixels per inch for an iPhone or iPhone Retina
var ppmm = ppi / INCH; // pixels per millimeter
var pHeight = UIScreen.MainScreen.ApplicationFrame.Height; // screen height in pixels
var pWidth = UIScreen.MainScreen.ApplicationFrame.Width; // screen width in pixels
var iHeight = (pHeight / ppi); // screen height in millimeters
var iWidth = (pWidth / ppi); // screen height in millimeters
var mHeight = (pHeight / ppi) * INCH; // screen height in millimeters
var mWidth = (pWidth / ppi) * INCH; // screen height in millimeters
我已经在Xamarin.Forms.Labs项目中实现了对显示属性的抽象。虽然它的目标是Xamarin.Forms,但也可以在没有它的情况下使用。对于Android和WP8,属性是计算出来的,但对于iOS,属性是由设备的硬件版本决定的。您可以从NuGet(Xamarin.Forms.Labs)为每个平台(iOS、Android、WP8)安装软件包,以获得功能齐全、经过测试且易于使用的类 以下是Android显示器完整源代码的链接: 根据显示密度,使用扩展方法计算物理尺寸(以便所有平台都可以重用): 以下是Android信息的屏幕截图: 也可用于iOS和WP8:
public Display()
{
var dm = Metrics;
this.Height = dm.HeightPixels;
this.Width = dm.WidthPixels;
this.Xdpi = dm.Xdpi;
this.Ydpi = dm.Ydpi;
this.FontManager = new FontManager(this);
}
public static Android.Util.DisplayMetrics Metrics
{
get
{
return Application.Context.Resources.DisplayMetrics;
}
}
public static double ScreenSizeInches(this IDisplay screen)
{
return Math.Sqrt(Math.Pow(screen.ScreenWidthInches(), 2) + Math.Pow(screen.ScreenHeightInches(), 2));
}
public static double ScreenWidthInches(this IDisplay screen)
{
return screen.Width / screen.Xdpi;
}
public static double ScreenHeightInches(this IDisplay screen)
{
return screen.Height / screen.Ydpi;
}