首页 > 解决方案 > 如何更改原始选项卡式页面栏的样式(带有 xamarin.forms 的 android)?

问题描述

早上好,我正在 xamarin.forms 中设计我的第一个应用程序,但我遇到了一个问题,那就是 android 中标签页栏的样式。在 iOS 上它工作得很好,但在 Android 上它有不同的显示,但我想让两个操作系统上的同质的东西知道怎么做?

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

标签: c#androidxamarin.forms

解决方案


您应该使用自定义效果,首先将您的 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 ()
        {
        }
    }
}

最后,在您的 tabbde 页面中:

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

推荐阅读