Xamarin表单,将listview放在tabbedPage中的相对或绝对布局中

时间:2017-03-12 14:43:50

标签: listview xamarin xamarin.forms

我在我的应用程序中设置了一个使用TabbedPage的设置,并且我有一个带有listView的页面。 为了显示ActivityIndi​​cator,我使用了将listView放在AbsoluteLayout中的方法。 但是,这会产生令人遗憾的影响,即我的列表视图中的最后一项是遥不可及的。我无法正确滚动它们。 我认为这与绝对布局的大小有关,但我无法做到这一点。

是否有其他解决方案来获取活动指标或是否可以更正?我应该使用相对布局吗?

我没有设置Content属性,而是使用此方法:

protected void SetContent (View content)
    {
        var overlay = new AbsoluteLayout ();
        loadingIndicator = new ActivityIndicator {
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.Start,
            Scale = 2,
            Color = Color.Silver
        };
        AbsoluteLayout.SetLayoutFlags (content, AbsoluteLayoutFlags.PositionProportional);
        AbsoluteLayout.SetLayoutBounds (content, new Rectangle (0f, 0f, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize));
        AbsoluteLayout.SetLayoutFlags (loadingIndicator, AbsoluteLayoutFlags.PositionProportional);
        AbsoluteLayout.SetLayoutBounds (loadingIndicator, new Rectangle (0.5, 0.5, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize));
        overlay.Children.Add (content);
        overlay.Children.Add (loadingIndicator);
        Content = overlay;
    }

在TabbedPage中的页面中。

请帮忙!

2 个答案:

答案 0 :(得分:0)

您也可以尝试使用Grid控件。无论何时在同一行内设置两个元素,它们都会正确地相互重叠。因此,基本上您将拥有包含所有页面内容的一行或多行,然后在页面底部,您可以定义ActivityIndicator并将其设置为第0行。具体取决于行数,您需要将RowSpacing设置为1以外的其他内容,以便覆盖整个页面。

通过执行此操作,您可以确保ActivityIndicator位于所有控件之上(XAML底部的控件位于运行时顶部的控件上)。显然,同样的事情也适用于代码隐藏。

答案 1 :(得分:0)

我建议使用ACR UserDialogs

using (this.Dialogs.Loading("Test Loading"))
    await Task.Delay(3000);

初​​始化

iOS和Windows

从v4.x起不再需要了。 iOS有一个Init函数,但它是可选的,只有在你需要/需要控制时才需要 iOS扩展等顶级视图控制器。虽然进度提示不会使用此工厂功能!

Android(在MainActivity.cs中)

UserDialogs.Init(this);