如何更改原始选项卡式页面栏的样式(带有xamarin.forms的Android)?

时间:2019-06-04 14:43:58

标签: c# android xamarin.forms

早上好, 我正在xamarin.forms中设计我的第一个应用程序,但是我遇到了一个问题,那就是android中tabbedpage栏的样式。 在iOS上效果很好,但在Android上却有不同的显示,但是我想让两个操作系统上的同类产品都知道该怎么做?

屏幕Android https://ibb.co/cYRLvc4 屏幕iOS https://ibb.co/ysnxBr8

1 个答案:

答案 0 :(得分:0)

您应该使用自定义效果,首先将android目标更新为9.0(和支持库) 然后,在您的窗体解决方案中创建“路由效果”:

使用Xamarin.Forms;

namespace YourApp
{
    public class NoShiftEffect : RoutingEffect
    {
        public NoShiftEffect() : base("MyEffect.NoShiftEffect")
        {
        }
    }
}

然后在Android中创建自定义渲染器:

using Android.Support.Design.BottomNavigation;
using Android.Support.Design.Widget;
using Android.Views;
using yournamespace.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly:ResolutionGroupName ("MyEffect")]
[assembly:ExportEffect (typeof(NoShiftEffect), "NoShiftEffect")]
namespace yournamespace.Droid
{
    public class NoShiftEffect : PlatformEffect
    {
        protected override void OnAttached ()
        {
            if (!(Container.GetChildAt(0) is ViewGroup layout))
                return;

            if (!(layout.GetChildAt(1) is BottomNavigationView bottomNavigationView))
                return;

            // This is what we set to adjust if the shifting happens
            bottomNavigationView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityLabeled;
        }

        protected override void OnDetached ()
        {
        }
    }
}

最后,在您的标签页中:

<TabbedPage.Effects>
    <local:NoShiftEffect />
</TabbedPage.Effects>