Xamarin Forms - 屏幕外的XAML布局

时间:2016-08-17 21:10:16

标签: xaml layout xamarin.forms

我试图做以下事情:

enter image description here

红色区域是AbsoluteLayout,我想将其移出屏幕,如图所示。我目前使用{Layout}.TranslateTo();,但它使用绝对位置,因此我不知道它是否适用于每个设备作为图片..

很难解释,但想象一下,我将此布局移至300px(x),然后在手机上它可以工作,因为屏幕不是很大,但在平板电脑上,它可能会不起作用,因为屏幕较大。

另外,如果进行旋转(水平模式),那么屏幕将比其他所有可能性等都大。

那么,它是否存在某些东西,如AbsoluteLayout的比例值(如2.0或-1.0)将布局排除在屏幕外,但适用于每个设备?

如果您完全理解我的意思,请不要犹豫,向我询问有关某些方面的更多信息:)

提前感谢!

2 个答案:

答案 0 :(得分:2)

AbsoluteLayout接受0到1之间的比例大小。因此您可以指定如下:

AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="SizeProportional" 

表示从(0,0)点开始并填满整个屏幕。

您的翻译电话应该是:

<强>的Xaml     

  <AbsoluteLayout x:Name="yourRedOne" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="SizeProportional">
    <!--Your red container content goes here-->

  </AbsoluteLayout>

</AbsolutLayout>

<强> Xaml.cs

yourRedOne.TranslateTo(Width, 0);

对于您的方向更改,您还应该在导览OnSizeAllocated中覆盖View方法并再次调用TranslateTo方法。

答案 1 :(得分:0)

鉴于您处于表单项目中,我会在启动应用程序时读取屏幕高度和宽度,并将其存储在全局变量中。这样的事情。

Android onAre of MainActivity

       //Get Screen Size of Phone for Android
        var metrics = Resources.DisplayMetrics;
        var widthInDp = ConvertPixelsToDp(metrics.WidthPixels);
        var heightInDp = ConvertPixelsToDp(metrics.HeightPixels);
        Global.CurrentScreen.screenWidth = widthInDp;
        Global.CurrentScreen.screenHeight = heightInDp;

    private int ConvertPixelsToDp(float pixelValue)
    {
        var dp = (int)((pixelValue) / Resources.DisplayMetrics.Density);
        return dp;
    }

对于AppDelegate中的iOS已完成启动

Global.CurrentScreen.screenHeight = (int)UIScreen.MainScreen.Bounds.Height;
Global.CurrentScreen.screenWidth = (int)UIScreen.MainScreen.Bounds.Width;

然后根据保存的大小进行翻译。