android - Xamarin.Forms:如何使用 DPI 和权重

标签 android ios xamarin.forms

我使用 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/

相关文章:

android - 在Android中对ImageView应用连续的动画

ios - 为什么我的约束没有发挥应有的作用?

ios - APNS 中重复的通知标识符安全吗

c# - 使用 Xamarin Forms 在 Android 上快速隐藏和重新出现键盘

Android API 25 CardView 不支持的类型

android - 在 Sqlite 和 MySQL 中使用相同的数据库记录

ios - Mapbox iOS - 显示多个标注

xamarin - 如何在 Xamarin Forms 中进行长按手势?

c# - Xamarin 表单 XAML : How can I inherit properties from another XAML file like ResourceDictionaries?

java - 方向更改后的 NullPointerException