Какова ширина главной страницы Главной страницы сведений в Xamarin.Формы?

#layout #size #xamarin.forms

#макет #размер #xamarin.forms

Вопрос:

В зависимости от размера экрана (и идиомы устройства?) Ширина главной страницы варьируется: на телефонах она составляет около 80% от ширины экрана, в то время как на планшетах это кажется постоянным размером, например 320 dp.

Кто-нибудь знает общую формулу для этого значения? Я бы хотел использовать его для размещения некоторых элементов во время построения, когда Width свойство еще не установлено.

Редактировать: я знаю , как получить текущий размер экрана. Но как изменяется ширина представленной главной страницы Xamarin.К ней относится страница основных сведений формы? Она не покрывает весь экран, а заполняет различную его часть в зависимости от устройства.

Ответ №1:

Вы могли бы запросить фактическую ширину экрана устройства, высоту и коэффициент масштабирования.

(Из 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.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);
        }

    }
  

Комментарии:

1. Спасибо за ваш ответ! К сожалению, я спрашиваю не о размере экрана ( я хорошо знаю, как это сделать ), а о ширине представленной главной страницы Xamarin. Страница с основными сведениями о форме, которая не занимает весь экран. Я отредактирую свой вопрос, чтобы сделать его более понятным.