Xamarin.forms 如何在设备的不同像素中自动调整标签大小?

Xamarin.forms 如何在设备的不同像素中自动调整标签大小?,xamarin.forms,Xamarin.forms,正如我们有可能适合的设备,如何给出标签的大小属性 如果我给大屏幕,它可能不适合小屏幕的小设备,因此不能很好地显示 还有拐角半径属性,我可以根据视图的宽度和高度给出拐角半径值 例如: <Image CornerRadius="15" WidthRequest="30" HeightRequest="30"></Image> 这是一个圆圈图像。但是,当图像大小更改时,不会根据图像的宽度或高度更改“角半径”属性 如何处理这个问题?这里有一篇很好的帖子,描述了如何处理这个问

正如我们有可能适合的设备,如何给出标签的大小属性

如果我给大屏幕,它可能不适合小屏幕的小设备,因此不能很好地显示

还有拐角半径属性,我可以根据视图的宽度和高度给出拐角半径值

例如:

<Image CornerRadius="15" WidthRequest="30" HeightRequest="30"></Image>

这是一个圆圈图像。但是,当图像大小更改时,不会根据图像的宽度或高度更改“角半径”属性


如何处理这个问题?

这里有一篇很好的帖子,描述了如何处理这个问题

在您的情况下,如果您想让
拐角半径始终等于其宽度的一半(以形成一个圆控件),可以使用数据绑定并在代码隐藏中设置其值

解决方案1: 在xaml中 如果希望控件在不同的屏幕中具有不同的大小,可以将控件的HeightRequest设置为屏幕百分比(例如10%)

在共享项目App.xaml.cs中 在Android MainActivity.cs中 在iOS中 在代码隐藏或视图模型中 解决方案2: 您可以在类中添加对
Xamarin.Essentials
的引用:

using Xamarin.Essentials;
以下信息通过API公开:

// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;

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

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

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

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

// Screen density
var density = mainDisplayInfo.Density;

关于屏幕高度,有一个更好的解决方案。使用Xamarin.estentials。并且您无需更改MainActivity.cs或AppDelegate.cs中的代码
public static double ScreenWidth;
public static double ScreenHeight;
protected override void OnCreate(Bundle savedInstanceState)
{
   TabLayoutResource = Resource.Layout.Tabbar;
   ToolbarResource = Resource.Layout.Toolbar;

   base.OnCreate(savedInstanceState);

   Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            
   global::Xamarin.Forms.Forms.SetFlags("Shell_Experimental", "Visual_Experimental", "CollectionView_Experimental");
   global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

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

   LoadApplication(new App());
}
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    //...
    App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width;
    App.ScreenHeight = (int)UIScreen.MainScreen.Bounds.Height;
    //...
}

Height = App.ScreenHeight/10.0;
Width = App.ScreenHeight/10.0;
Radius = Width / 2.0;

using Xamarin.Essentials;
// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;

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

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

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

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

// Screen density
var density = mainDisplayInfo.Density;