我试图做以下事情:
红色区域是AbsoluteLayout
,我想将其移出屏幕,如图所示。我目前使用{Layout}.TranslateTo();
,但它使用绝对位置,因此我不知道它是否适用于每个设备作为图片..
很难解释,但想象一下,我将此布局移至300px(x),然后在手机上它可以工作,因为屏幕不是很大,但在平板电脑上,它可能会不起作用,因为屏幕较大。
另外,如果进行旋转(水平模式),那么屏幕将比其他所有可能性等都大。
那么,它是否存在某些东西,如AbsoluteLayout
的比例值(如2.0或-1.0)将布局排除在屏幕外,但适用于每个设备?
如果您完全理解我的意思,请不要犹豫,向我询问有关某些方面的更多信息:)
提前感谢!
答案 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;
然后根据保存的大小进行翻译。