【问题标题】:Issues with the Grid (Xamarin Forms)网格问题(Xamarin 表单)
【发布时间】:2016-12-24 21:07:13
【问题描述】:

我使用下面的代码给人一种纯色被正方形掩盖的印象:

public Page1()
{
    InitializeComponent();

    var maskSide = 196;

    var grid = new Grid {ColumnSpacing = 0, RowSpacing = 0};
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength((App.ScreenHeight - maskSide) / 2, GridUnitType.Absolute) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength((App.ScreenWidth - maskSide) / 2, GridUnitType.Absolute) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(maskSide, GridUnitType.Absolute) });
    grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 0, 2);

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 1, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Transparent }, 1, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 1, 2);

    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 0);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 1);
    grid.Children.Add(new BoxView { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, BackgroundColor = Color.Lime }, 2, 2);

    grid.HorizontalOptions = LayoutOptions.Fill;
    grid.VerticalOptions = LayoutOptions.Fill;

    Content = grid;
}

我在 Droid 的 MainActivity 的 OnCreate 中设置设备尺寸,如下所示:

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

结果如下:

但是有两个问题:

如您所见,有两个问题:

  1. 由于某种原因,遮罩方块并不完全位于中间。
  2. 垂直和水平堆栈中的最后一项之间存在一个(或可能两个)像素间隙。

我不明白,有什么问题。有什么建议吗?

【问题讨论】:

  • 如果你切换到 xaml 并使用像 Gorilla Player 这样的设计师,那么你的生活会轻松很多
  • 这与问题有什么关系?
  • 它没有,只是免费的小费:)

标签: xamarin grid xamarin.forms


【解决方案1】:

Grid 可以为您解决这个问题

grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(maskSide, GridUnitType.Absolute) });
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(maskSide, GridUnitType.Absolute) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

【讨论】:

  • 现在垂直间距线消失了,水平线还在
  • @NikaGamkrelidze 是否居中?我没有看到我身边的任何线条。你运行的是什么版本?
  • 是的,居中问题消失了。我正在使用XF 2.0.0.6482。在 Xamarin Android Player 模拟器 (Lollipop 5.1") 上测试时,没有更多的间距线。但是,在我的 Nexus 5x (Marshmallow) 上测试时,垂直间距线显然仍然存在问题。
  • @NikaGamkrelidze 你复制了上面的代码吗?我觉得很奇怪,一行会消失。我正在使用2.1.0.6529 并且没有出现任何线条。您需要向我显示更多代码才能弄清楚该行出现的原因。
  • 是的,我使用了你的代码。没有更多的代码,就是这样。
猜你喜欢
  • 2020-07-17
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多