Xamarin.Forms中的主从页面的主页面有多宽? [英] How wide is the master page of a Master-Detail Page in Xamarin.Forms?

查看:89
本文介绍了Xamarin.Forms中的主从页面的主页面有多宽?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

取决于屏幕尺寸(和设备惯用语?),母版页的宽度会有所不同:在手机上,其约为屏幕宽度的80%,而在平板电脑上,它的尺寸似乎是恒定的,如320 dp. /p>

有人知道这个值的一般公式吗?我想用它在尚未设置Width属性的情况下,在构造期间布置一些元素.

修改: 我知道如何获取当前屏幕尺寸.但是,所显示的Xamarin.Form母版详细页的宽度与它的宽度有何关系?它不会覆盖整个屏幕,但会根据设备而填充整个屏幕的不同部分.

解决方案

您可以请求设备的实际屏幕宽度,高度和比例因子.

(来自 https://github.com/mattregul/Xamarin_GetDeviceScreensize )

iOS AppDelegate.cs

[Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            // Store off the device sizes, so we can access them within Xamarin Forms
            App.DisplayScreenWidth  = (double)UIScreen.MainScreen.Bounds.Width;
            App.DisplayScreenHeight = (double)UIScreen.MainScreen.Bounds.Height;
            App.DisplayScaleFactor  = (double)UIScreen.MainScreen.Scale;

            LoadApplication(new App());

            return base.FinishedLaunching(app, options);
        }
    }

Android MainActivity.cs

[Activity(Label = "Xamarin_GetDeviceScreensize.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            // Store off the device sizes, so we can access them within Xamarin Forms
            App.DisplayScreenWidth  = (double)Resources.DisplayMetrics.WidthPixels  / (double)Resources.DisplayMetrics.Density; // Width = WidthPixels / Density
            App.DisplayScreenHeight = (double)Resources.DisplayMetrics.HeightPixels / (double)Resources.DisplayMetrics.Density; // Height = HeightPixels / Density
            App.DisplayScaleFactor  = (double)Resources.DisplayMetrics.Density;

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App());
        }
    }

Xamarin Forms App.cs

public class App : Application
    {
        public static double DisplayScreenWidth;
        public static double DisplayScreenHeight;
        public static double DisplayScaleFactor;

        public App()
        {

            string ScreenDetails =  Device.OS.ToString() + " Device Screen Size:\n" +
                                    $"Width: {DisplayScreenWidth}\n" +
                                    $"Height: {DisplayScreenHeight}\n" +
                                    $"Scale Factor: {DisplayScaleFactor}";

            // The root page of your application
            var content = new ContentPage
            {
                Title = "Xamarin_GetDeviceScreensize",
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            HorizontalTextAlignment = TextAlignment.Center,
                            FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label)),
                            Text = ScreenDetails
                        }
                    }
                }
            };

            MainPage = new NavigationPage(content);
        }

    }

Depending on the screen size (and device idiom?) the width of the master page varies: On phones it is about 80 % of the screen width, while on tablets it seems to be a constant dimension like 320 dp.

Does anybody know a general formula for this value? I'd like to use it for laying out some elements during construction time, when the Width property isn't set, yet.

Edit: I know how to get the current screen size. But how does the width of the presented master page of Xamarin.Form's master-detail page relate to it? It doesn't cover the whole screen, but fills a different fraction of it depending on the device.

解决方案

You could request the device's actual screen width, height, and scale factor.

(From https://github.com/mattregul/Xamarin_GetDeviceScreensize)

iOS AppDelegate.cs

[Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            // Store off the device sizes, so we can access them within Xamarin Forms
            App.DisplayScreenWidth  = (double)UIScreen.MainScreen.Bounds.Width;
            App.DisplayScreenHeight = (double)UIScreen.MainScreen.Bounds.Height;
            App.DisplayScaleFactor  = (double)UIScreen.MainScreen.Scale;

            LoadApplication(new App());

            return base.FinishedLaunching(app, options);
        }
    }

Android MainActivity.cs

[Activity(Label = "Xamarin_GetDeviceScreensize.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            // Store off the device sizes, so we can access them within Xamarin Forms
            App.DisplayScreenWidth  = (double)Resources.DisplayMetrics.WidthPixels  / (double)Resources.DisplayMetrics.Density; // Width = WidthPixels / Density
            App.DisplayScreenHeight = (double)Resources.DisplayMetrics.HeightPixels / (double)Resources.DisplayMetrics.Density; // Height = HeightPixels / Density
            App.DisplayScaleFactor  = (double)Resources.DisplayMetrics.Density;

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App());
        }
    }

Xamarin Forms App.cs

public class App : Application
    {
        public static double DisplayScreenWidth;
        public static double DisplayScreenHeight;
        public static double DisplayScaleFactor;

        public App()
        {

            string ScreenDetails =  Device.OS.ToString() + " Device Screen Size:\n" +
                                    $"Width: {DisplayScreenWidth}\n" +
                                    $"Height: {DisplayScreenHeight}\n" +
                                    $"Scale Factor: {DisplayScaleFactor}";

            // The root page of your application
            var content = new ContentPage
            {
                Title = "Xamarin_GetDeviceScreensize",
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            HorizontalTextAlignment = TextAlignment.Center,
                            FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label)),
                            Text = ScreenDetails
                        }
                    }
                }
            };

            MainPage = new NavigationPage(content);
        }

    }

这篇关于Xamarin.Forms中的主从页面的主页面有多宽?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆