【问题标题】:Xamarin.Forms: How to use DPI and WeightsXamarin.Forms:如何使用 DPI 和权重
【发布时间】:2020-01-08 12:25:32
【问题描述】:

我使用 Xamarin for Android 开发了很多应用程序。每当我想展示一张图片,并希望这张图片在每部手机上具有相同的尺寸时,我都会使用权重。它们的作用类似于百分比值。

所以我可以声明一张图片或一个布局,例如总是占用其父布局的 50%。 结果是,每部手机上的一切看起来都一样。

现在我切换到 Xamarin.Forms 也为 iOS 开发。

但是,我刚刚发现这里不再存在权重甚至 DPI(工作方式类似)。

当从同一个 XAML 共享时,iOS 和 Android 之间的图像大小会大不相同。

如何在任何选项(DPI和权重)都有时如何继续这一点?有没有等价物?

谢谢!

【问题讨论】:

  • 只是好奇,您是否投了反对票以及您在我的回答中特别不理解的内容(这是正确的)。谢谢!

标签: android ios xamarin.forms


【解决方案1】:

有很多不同的解决方案可以解决 iOS 和 Android 之间的 UI 显示问题。

例如

选项 1:

您可以使用 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;

选项 2:

您可以直接将 Image 的大小绑定到其父级。

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>

【讨论】:

    【解决方案2】:

    权重在网格中作为列或行定义的一部分可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多