遇到了同样的问题,尝试从 GitHub 上的代码创建自定义 TabbedPageRenderer,但由于多个类和接口的范围为内部,所以没有运气。找到了一个解决方案,虽然很老套,但在我们的案例中似乎可以正常工作。
只需创建一个继承自 TabbedPage 的新 BottomTabbedPage,这样您就可以链接一个新的 Renderer for Android,然后创建一个新的 Renderer,如下所示:
[assembly: ExportRenderer(typeof(BottomTabbedPage), typeof(BottomTabbedPageRenderer))]
namespace My.XForms.Droid.Renderers
{
public class BottomTabbedPageRenderer : TabbedPageRenderer
{
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
InvertLayoutThroughScale();
base.OnLayout(changed, l, t, r, b);
}
private void InvertLayoutThroughScale()
{
ViewGroup.ScaleY = -1;
TabLayout tabLayout = null;
ViewPager viewPager = null;
for (int i = 0; i < ChildCount; ++i)
{
Android.Views.View view = (Android.Views.View)GetChildAt(i);
if (view is TabLayout) tabLayout = (TabLayout)view;
else if (view is ViewPager) viewPager = (ViewPager)view;
}
tabLayout.ScaleY = viewPager.ScaleY = -1;
viewPager.SetPadding(0, -tabLayout.MeasuredHeight, 0, 0);
}
}
}
仅缩放页面布局然后再次缩放子级并不能解决问题,因为原始 TabbedPageRenderer 将 ViewPager 填充为不与 TabLayout 重叠,因此您包含的页面会出现起始间隙,因此插入负填充解决这个问题。
不是一个理想的解决方案,只是工作,但至少你没有运行完整的 TabbedPage 实现。