Te sugerimos que pruebes esta respuesta en un ambiente controlado antes de pasarlo a producción, un saludo.
Solución:
Actualizar: Puede usar el paquete nuget de Xamarin.Essentials para este y muchos otros fines.
var width = DeviceDisplay.MainDisplayInfo.Width;
var height = DeviceDisplay.MainDisplayInfo.Height;
Respuesta antigua:
Hay una manera fácil de obtener el ancho y la altura de la pantalla en Xamarin.Forms
y acceda a él globalmente desde cualquier lugar en su aplicación. Yo haría algo como esto:
1. Cree dos miembros públicos en su App.cs:
public static class App
public static int ScreenWidth;
public static int ScreenHeight;
...
2. Configure los valores en suMainActivity.cs
(Android) o suAppDelegate.cs
(IOS):
Androide:
protected override void OnCreate(Bundle bundle)
...
App.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels; // real pixels
App.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels; // real pixels
// App.ScreenWidth = (int)(Resources.DisplayMetrics.WidthPixels / Resources.DisplayMetrics.Density); // device independent pixels
// App.ScreenHeight = (int)(Resources.DisplayMetrics.HeightPixels / Resources.DisplayMetrics.Density); // device independent pixels
...
iOS:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
...
App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width;
App.ScreenHeight = (int)UIScreen.MainScreen.Bounds.Height;
...
Si está utilizando formularios de xamarin, puede encontrar el ancho y el alto de la pantalla actual en la biblioteca de clases portátil (pcl) como se muestra a continuación.
Para Width usas esto en pcl,
Application.Current.MainPage.Width
Para la altura puedes hacer esto en pcl,
Application.Current.MainPage.Height
Actualmente no existe una forma desde Xamarin.Forms, pero lo tenemos implementado como una interfaz compatible con PCL en Xamarin.Forms.Labs, que puede obtener de NuGet o del código fuente de GitHub.
https://github.com/XForms/Xamarin-Forms-Labs
IDevice tiene la propiedad IDisplay con la información; alto, ancho, densidad de píxeles para X e Y y un par de métodos de extensión para calcular el tamaño en pulgadas.
Ejemplo de página para obtener información del dispositivo:
https://github.com/XForms/Xamarin-Forms-Labs/blob/master/samples/Xamarin.Forms.Labs.Sample/Pages/Services/ExtendedDeviceInfoPage.cs
#region Display information
var display = device.Display;
var displayFrame = new Frame();
if (display != null)
displayFrame.Content = new StackLayout()
Children =
new Label() Text = display.ToString() ,
new Label() Text = string.Format("Screen width ist 0:0.0 inches.", display.ScreenWidthInches()) ,
new Label() Text = string.Format("Screen height ist 0:0.0 inches.", display.ScreenHeightInches()) ,
new Label() Text = string.Format("Screen diagonal size ist 0:0.0 inches.", display.ScreenSizeInches())
;
else
displayFrame.Content = new Label() TextColor = Color.Red, Text = "Device does not contain display information." ;
stack.Children.Add(displayFrame);
#endregion
Crear un marco exacto de pulgada a pulgada en todas las plataformas, independientemente de las propiedades de visualización:
https://github.com/XForms/Xamarin-Forms-Labs/blob/master/samples/Xamarin.Forms.Labs.Sample/Pages/Services/AbsoluteLayoutWithDisplayInfoPage.cs
public class AbsoluteLayoutWithDisplayInfoPage : ContentPage
public AbsoluteLayoutWithDisplayInfoPage(IDisplay display)
this.Title = "Absolute Layout With Display Info";
var abs = new AbsoluteLayout();
var inchX = display.WidthRequestInInches(1);
var inchY = display.HeightRequestInInches(1);
var originX = display.WidthRequestInInches(display.ScreenWidthInches() / 2);
var originY = display.HeightRequestInInches(display.ScreenHeightInches() / 2);
abs.Children.Add(new Label() Text = "1"x"1" blue frame" );
abs.Children.Add(new Frame()
BackgroundColor = Color.Navy,
,
new Rectangle(originX - inchX/2, originY - inchY/2, inchX, inchY));
abs.Children.Add(new Frame()
BackgroundColor = Color.White
,
new Rectangle(originX - inchX/16, originY - inchY/16, inchX/8, inchY/8));
this.Content = abs;
Para acceder a la información del dispositivo, configure su resolución DI o use un static envase. Las 3 plataformas tienen llamadas de un solo dispositivo con static Propiedad del dispositivo actual:
resolverContainer.Register(t => WindowsPhoneDevice.CurrentDevice)
resolverContainer.Register(t => AppleDevice.CurrentDevice)
resolverContainer.Register(t => AndroidDevice.CurrentDevice)
Si tienes alguna desconfianza o disposición de refinar nuestro reseña eres capaz de dejar una observación y con placer lo leeremos.