首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AbsoluteLayout不填充屏幕

AbsoluteLayout不填充屏幕
EN

Stack Overflow用户
提问于 2016-04-18 11:26:42
回答 1查看 9.1K关注 0票数 7

在Android6.0 Marshmellow上,我对Xamarin表单的绝对布局有一个问题

当设置一个视图来填充整个屏幕时,屏幕底部会留下一个1 1px的空白。

奇怪的是,如果你把屏幕旋转成景观,就不会发生这种情况。或关于4.4

xaml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XamarinTest.Page1">
  <AbsoluteLayout BackgroundColor="White">
    <BoxView BackgroundColor="Red" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">

    </BoxView>
  </AbsoluteLayout>
</ContentPage>

屏幕截图:(这些来自vs模拟器,但我在设备上也有相同的行为,如三星星系6)。

在本例中,我在屏幕上使用了一个boxview文件,但它是与屏幕底部对齐的任何位置。

我正在寻找的是某种解决方案或自定义渲染器,它将确保在1,1或拉伸屏幕的全部高度的项目被放置在或延伸到屏幕的底部。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 17:11:00

这是在Xamarin.Forms 2.1.0:bug.cgi?id=40092中确认的错误。

您可以尝试通过重写LayoutChildren并向基本实现多发送一个高度像素来修复它。

代码语言:javascript
复制
public class MyAbsoluteLayout : AbsoluteLayout
{
    protected override void LayoutChildren(double x, double y, double width, double height)
    {
        base.LayoutChildren(x, y, width, height+1);
    }
}

然后在XAML中使用它

代码语言:javascript
复制
<local:MyAbsoluteLayout BackgroundColor="White">
  <BoxView BackgroundColor="Red" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">

  </BoxView>
</local:MyAbsoluteLayout>

如果这没有帮助,您可以尝试重新实现LayoutChildren函数并操作结果,如

代码语言:javascript
复制
public class MyAbsoluteLayout : AbsoluteLayout
{
    private readonly MethodInfo _computeLayout;

    public MyAbsoluteLayout()
    {
        _computeLayout = typeof(AbsoluteLayout).GetTypeInfo().GetDeclaredMethod("ComputeLayoutForRegion");
    }

    protected override void LayoutChildren(double x, double y, double width, double height)
    {
        foreach (View logicalChild in Children)
        {
            Size region = new Size(width, height);
            Rectangle layoutForRegion = (Rectangle)_computeLayout.Invoke(null, new object[] { logicalChild, region });
            layoutForRegion.X += x;
            layoutForRegion.Y += y + 1;
            Rectangle bounds = layoutForRegion;
            logicalChild.Layout(bounds);
        }
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36692647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档