Xamarin.Android的底部标签(在Xamarin.forms应用程序中)

Bri*_*Lee 4 tabs xamarin.android xamarin.forms

我正在使用Xamarin.forms制作应用程序.

你们都知道Xamarin.forms的常规选项卡,TabbedPage位于顶部.因为它应该存在,如果它是尊重Android UX的原生Android应用程序.

但现在情况发生了变化.甚至谷歌也宣布了新的底部标签栏,称为"底部导航". https://github.com/roughike/BottomBar 许多主要应用都在使用底部标签栏.

但我无法使用新的底部导航.因为我的应用程序基于Xamarin.forms并使用表格中的TabbedPage.如果我尝试使用底部导航,那将会更复杂.

(我也是从表格制作iOS应用程序)

所以最好的方法是将原生标签移到底部.

所以我找到了这个.(也许是旧的) http://envyandroid.com/align-tabhost-at-bottom/

但不知道如何在Xamarin.Android中使用.你可以帮帮我吗?

小智 11

曾经遇到同样的问题,试图从GitHub上的代码创建一个自定义的TabbedPageRenderer但由于几个类和接口作为内部范围而没有运气.找到了一个解决方案,一个hacky虽然,但似乎在我们的情况下工作正常.

只需创建一个继承自TabbedPage的新BottomTabbedPage,以便您可以链接Android的新渲染器,然后创建一个新的渲染器,如下所示:

[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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只是缩放页面布局,然后再次缩放子项不会成功,因为原始TabbedPageRenderer填充ViewPager不与TabLayout重叠,因此您包含的页面将出现一个起始间隙,因此插入负填充修复它.

不是一个理想的解决方案,只是工作,但至少你没有运行完整的TabbedPage实现.


Pol*_*riz 7

对Xamarin Forms 使用BottomNavigationBarXF NuGet包.
结果:
在此输入图像描述

  • 我从没想过将标签栏放到底部是如此困难. (3认同)