Xamarin如何在屏幕上形成控件,图像和图标的间距和其他尺寸?

时间:2015-05-08 11:02:45

标签: xamarin autolayout xamarin.forms

对于iOS(4s 5s及以上),我是否需要针对不同的屏幕尺寸使用不同的图像? 我们如何在iOS中使用Xamarin表单在屏幕尺寸和分辨率上设置图像/图标和控件的保留尺寸。 请参考这个来理解问题 Autolayout and proportional positioning

但我需要xamarin表格的解决方案。

2 个答案:

答案 0 :(得分:0)

我一直在使用不同的解决方案,如:

命名惯例

iphone 4 = "image.png"
iphone 5,6 (or retina) = "image@2x.png"
iphone 6+ = "image@3x.png"

使用依赖服务获取设备宽度和高度:

的iOS

        public double Width
        {
            get
            {
                return UIScreen.MainScreen.Bounds.Width;
            }
        }

        public double Height
        {
            get
            {
                return UIScreen.MainScreen.Bounds.Height;
            }
        }

的Android

  public double Width
    {
        get
        {
            var ctx = Forms.Context;
            var metrics = ctx.Resources.DisplayMetrics;
            return (ConvertPixelsToDp(metrics.WidthPixels));
        }
    }

    public double Height
    {
        get
        {
            var ctx = Forms.Context;
            var metrics = ctx.Resources.DisplayMetrics;

            return (ConvertPixelsToDp(metrics.HeightPixels));
        }
    }

然后我可以根据屏幕尺寸调整图像大小,例如ScreenWidth / 3.

答案 1 :(得分:0)

对于iOS,我使用PaintCode。然后我在Xamarin.Forms中有一个名为:IconView的视图和iOS中的自定义渲染器,它使用PaintCode绘制Icon(图像)。

当Xamarin.Forms调整IconView的大小时,自定义渲染器会重绘。 (您必须在OnPropertyChanged方法上重绘:

// IconViewRenderer.cs
...
    protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged (sender, e);
        if (e.PropertyName == "Icon" || e.PropertyName == "X" || e.PropertyName == "Y" || e.PropertyName == "Width" || e.PropertyName == "Height")
            SetNeedsDisplay ();
    }

...
    public override void Draw (CoreGraphics.CGRect rect)
    {
        base.Draw (rect);

        var iconView = (IconView)Element;
        switch (iconView.Icon) {
        case IconView.IconKind.SomeIcon:
            PaintCode.DrawSomeIcon (rect);
        case IconView.IconKind.SomeOtherIcon:
            PaintCode.DrawSomeOtherIcon (rect);
        ....
        }
    }