在Xamarin.Forms中解决不同的屏幕分辨率?缩放元素?

时间:2016-05-29 10:49:18

标签: android xamarin xamarin.ios xamarin.android

我是Xamarin移动开发的新手,我一直致力于我的第一个Xamarin.Forms跨平台应用程序。

在目前的状态下,我的华为Nexus上的用户界面看起来很完美,但遗憾的是有问题。

在开发和测试期间,调试过程到目前为止我一直使用iPhone 6 Plus和Nexus 7仿真器和Nexus 6P作为物理设备假设(到我的错误)Xamarin将把所有内容扩展到具有较小屏幕的设备,然而,结果证明是完全错误的。

当我试图在屏幕更小的模拟器上运行应用程序时,比如iPhone 4/5,UI完全崩溃并且看起来不合适(参考图片:http://i.imgur.com/bSMQcuW.png),现在我是留下疑惑,正是我做错了。

给定图片中UI的概念如下:网格包含包含嵌套网格的行,其中包含Label和ButtonGroup(XLabs)。

var Grid = new Grid
{
    HorizontalOptions = LayoutOptions.Fill,
    ColumnDefinitions =
    {
        new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
        new ColumnDefinition { Width = new GridLength(2, GridUnitType.Star) }
    }
};

var TextLabel = new Label 
{
    VerticalOptions = LayoutOptions.CenterAndExpand, 
    HorizontalOptions = LayoutOptions.Start, 
    FontSize = 18, TextColor = Color.Black 
};

var VarButtonGroup = new ButtonGroup
{
    IsNumber = true,
    Rounded = true,
    ViewBackgroundColor = Color.White,
    BorderColor = Color.White,
    OutlineColor = Color.White,
    BackgroundColor = Color.FromHex("#0099cc"),
    TextColor = Color.White,
    SelectedTextColor = Color.White,
    SelectedBackgroundColor = Color.Black,
    SelectedBorderColor = Color.White,
    SelectedFrameBackgroundColor = Color.White,
    HorizontalOptions = LayoutOptions.EndAndExpand,
    VerticalOptions = LayoutOptions.Center,
    Padding = new Thickness(10),
    Items = RadioButtonValues,
    Scale = 1,
    SelectedIndex = -1
 };

我知道您可以使用Device.OnPlatform()自定义特定于平台的代码,但这似乎似乎无法解决任何问题。

Xamarin.Forms给出的文档仅显示了平台之间的差异(iOS / Android / WinPhone),但它没有解释如何处理具有多种不同屏幕尺寸/分辨率的手机 - 或者也许我错过了它。

1 个答案:

答案 0 :(得分:1)

尺寸与显示无关。这意味着,Xamarin.Forms使用平台特定的机制来计算绝对像素尺寸。

示例

320 * 480像素显示器上的1 * 1像素视图(例如iOS上的基本单元)在640 * 960像素和640 * 1136像素显示器上将是2 * 2像素。

这对您意味着:通常您不必关心解决方案。

您可以做的是根据Device.Idiom提供不同的布局。以下是一个示例:https://blog.xamarin.com/bringing-xamarin-forms-apps-to-tablets/