我使用 Xamarin for Android 开发了很多应用程序。每当我想展示一张图片,并希望这张图片在每部手机上都具有相同的尺寸时,我会使用权重。它们的作用类似于百分比值。
所以我可以声明图片或布局,例如总是占据其父布局的 50%。 结果是,每部手机上的一切看起来都一样。
现在我切换到 Xamarin.Forms 以同时针对 iOS 进行开发。
但是,我刚刚发现这里不再存在权重甚至 DPI(其工作方式类似)。
当从相同的 XAML 共享时,iOS 和 Android 之间的图像大小会大相径庭。
当选项(DPI 和权重)都不可用时,我该如何继续?有等价物吗?
谢谢!
最佳答案
有许多不同的解决方案可以解决 iOS 和 Android 之间的 UI 显示问题。
例如
选项 1:
您可以使用 Xamarin.Essentials 包获取屏幕大小,然后设置图像的百分比(使用数据绑定(bind))。
// 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;
选项 2:
您可以直接将 Image 的大小绑定(bind)到其父对象。
public class SizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value / 2.0= 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return 0;
}
}
在 xaml 中
<ContentPage.Resources>
<ResourceDictionary>
<local:SizeConverter x:Key="sizeConvert" />
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout x:Name="stackLayout" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Image Source="xxx" HeightRequest="{Binding Source={x:Reference stackLayout}, Path=Height,Converter={StaticResource sizeConvert}}" WidthRequest="{Binding Source={x:Reference stackLayout}, Path=Width,Converter={StaticResource sizeConvert}}" />
</StackLayout>
关于android - Xamarin.Forms:如何使用 DPI 和权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645845/