web-dev-qa-db-fra.com

Obtenir la largeur d'écran actuelle dans les formulaires xamarin

Je suis en train de créer un projet Xamarin Forms et je suis resté coincé dans la recherche de la largeur d'écran actuelle en fonction du périphérique utilisé.

Je sais comment cela peut être fait dans Android et iOS, mais j'ai besoin d'un moyen de trouver la largeur en portable. 

13
Tushar patel

Vous pouvez essayer ce Application.Current.MainPage.Width dans mon cas cela a fonctionné et je suis capable de trouver la largeur de périphérique dans le projet portable lui-même.

34
Parth Patel

Code commun (dans App.xaml.cs)

public static int ScreenHeight {get; set;}
public static int ScreenWidth {get; set;}

Partie Android (dans MainActivity.cs, dans la méthode OnCreate)

App.ScreenHeight = (int) (Resources.DisplayMetrics.HeightPixels / Resources.DisplayMetrics.Density);
App.ScreenWidth = (int) (Resources.DisplayMetrics.WidthPixels / Resources.DisplayMetrics.Density);

Partie iOS (dans AppDelegate.cs, dans la méthode FinishedLaunching)

App.ScreenHeight = (int)UIScreen.MainScreen.Bounds.Height;
App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width;

Ainsi, App.ScreenHeight et App.ScreenWidth seront initialisés lorsque l'application sera lancée, vous pourrez alors les utiliser n'importe où dans le code commun.

18

Je sais que c’est un vieux fil, mais il convient de mentionner que récemment Xamarin.Essentials NuGet pakage a été publié et qu’il existe une classe utile DeviceDisplay qui devrait gérer cette tâche pour vous. 

La documentation peut être trouvée ici .

Exemple d'utilisation:

// Get Metrics
var metrics = DeviceDisplay.ScreenMetrics;

// Orientation (Landscape, Portrait, Square, Unknown)
var orientation = metrics.Orientation;

// Rotation (0, 90, 180, 270)
var rotation = metrics.Rotation;

// Width (in pixels)
var width = metrics.Width;

// Height (in pixels)
var height = metrics.Height;

// Screen density
var density = metrics.Density;
10
EvZ

Vous pouvez utiliser la propriété Width lorsque vous vous trouvez dans un ContentPage. Par exemple,

protected override void OnAppearing()
{
    base.OnAppearing();
    double w = this.Width;
}

Notez que ceci est défini pendant la phase de mise en page. Donc, vous ne pouvez l'utiliser qu'après l'initialisation de la page, sinon c'est -1.

https://developer.xamarin.com/api/property/Xamarin.Forms.VisualElement.Width/

5
Khoa Tran

Une autre approche consiste à utiliser le remplacement "OnSizeAllocated" pour votre page, puis à prendre la hauteur et la largeur en fonction des modifications apportées à l'écran de l'utilisateur. Vous pouvez créer une classe statique pour définir la hauteur et la largeur de votre écran à chaque changement, puis y accéder à partir de cette classe si nécessaire.

La classe statique pour définir et accéder à la dimension de l'appareil:

public static class ScreenDimensions
{
    public static double Height { get; set; }
    public static double Width { get; set; }
}

Remplacer pour obtenir les dimensions de l'écran:

protected override void OnSizeAllocated(double width, double height)
{
    base.OnSizeAllocated(width, height);
    ScreenDimensions.Height = height;
    ScreenDimensions.Width = width;
}
1
Shaw

Je suppose que le meilleur moyen consiste à utiliser les informations xamarin.forms.Device. 

               Size size = Device.Info.PixelScreenSize;

            if (size.Width <= 720 && size.Height <= 1280)
            {
                stkLayoutTop.Margin = new Thickness(5, 30, 10, 0);
            }
            else
            {
                stkLayoutTop.Margin = new Thickness(5, 50, 10, 0);
            }
0
Igor Monteiro

Je créerais une structure statique dans le code partagé afin de pouvoir accéder facilement aux valeurs de largeur/hauteur de l'écran (ainsi que d'effectuer des liaisons en xAML)

La structure dans l'espace de nom de l'application (par exemple, dans App.xaml.cs):

using System;
using Xamarin.Forms;

namespace YourAppName
{
    public static class HelperFunction
    {
        ... 

        public struct Constant
        {
            public static double ScreenWidth = Application.Current.MainPage.Width;
            public static double ScreenHeight = Application.Current.MainPage.Height;
        }

        ...
    }
}

récupérer la largeur de l'écran en C #:

var labelWidth = Constant.ScreenHeight * 0.2;
// then do something with labelWidth

Récupération de la largeur d’écran en XAML:

<Label Text="Text with insane font size" FontSize="{Binding Source={x:Static local:Constant.ScreenWidth}}"/>
0
Patrick