#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. Страница с основными сведениями о форме, которая не занимает весь экран. Я отредактирую свой вопрос, чтобы сделать его более понятным.