Вы можете исправить это с помощью Routing Effect
, который отключает смещение и правильно отображает метки.
Эффект многократного использования лучше, безопаснее и проще в использовании, чем пользовательский рендер, использующий отражение.
Сначала убедитесь, что скомпилированы с Android 9.0 (Target Frameowrk) и обновите библиотеки поддержки Xamarin Android до v28 +
В коде платформы (Android Project) создайте этот эффект:
using Android.Support.Design.BottomNavigation;
using Android.Support.Design.Widget;
using Android.Views;
using KvApp.Droid.Effects;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly:ResolutionGroupName ("MelkRadar")]
[assembly:ExportEffect (typeof(NoShiftEffect), nameof(NoShiftEffect))]
namespace MelkRadar.Droid.Effects
{
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 ()
{
}
}
}
Добавьте эффект в свой общий код (NetStandard Project)
using Xamarin.Forms;
namespace MelkRadar
{
public class NoShiftEffect : RoutingEffect
{
public NoShiftEffect() : base("MelkRadar.NoShiftEffect")
{
}
}
}
Теперь вы можете использовать эффект в своемСтраница Xaml:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage
x:Class="MelkRadar.App.MobileApp.Views.TabbedView"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
xmlns:view="clr-namespace:MelkRadar.App.MobileApp.Views"
android:TabbedPage.ToolbarPlacement="Bottom"
BarTextColor="Red">
<TabbedPage.Effects>
<local:NoShiftEffect />
</TabbedPage.Effects>
<view:CustomerExplorerView Title="مشتریان" />
<view:RealtorSettingView Title="تنظیمات" />
<view:FavoriteAdvertsExplorerView Title="زونکن" />
<view:AdvertsExplorerView Title="اگهی ها" />
</TabbedPage>
Подробнее об эффектах здесь
Полное руководство от Джеймса Монтемагно здесь