Панель инструментов TabbedPage отображает активный элемент ToolbarItem только тогда, когда ToolbarPlacement находится внизу, а количество ContentPage больше 4

В версии Xamarin.Forms 3.1 есть функция, которую мы уже поддерживаем для размещения панели инструментов Android внизу. Но когда страница содержимого на странице с вкладками больше 4, тогда на панели инструментов не будут отображаться все вкладки, будет отображаться только текущая активная вкладка. остальные можно только переключить, и тогда вкладка будет выбрана соответствующим образом. это мой код, на панели инструментов должно быть четыре вкладки:

<?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">

<view:CustomerExplorerView Title="مشتریان" />
<view:RealtorSettingView Title="تنظیمات" />
<view:FavoriteAdvertsExplorerView Title="زونکن" />
<view:AdvertsExplorerView Title="اگهی ها" />

</TabbedPage>

посмотрите эти фотографии, пожалуйста:

https://cdn1.imggmi.com/uploads/2019/6/11/6659fa76fc68ae58deb17d6dfd74f089-full.jpg

person negar ghasemi    schedule 11.06.2019    source источник


Ответы (2)


Привет, это известная проблема с нижней панелью вкладок, когда есть более 3 элементов, Android активирует режим сдвига. Чтобы решить эту проблему, вы можете выполнить собственный рендеринг.

Скопируйте и вставьте код отсюда в свой проект, чтобы реализовать пользовательский рендеринг для отключения режима сдвига https://gist.github.com/LynoDesu/64904b6d143892cf14a60a32798a36bb

person Thinh    schedule 11.06.2019

Вы можете исправить это с помощью Routing Effect, который отключает смещение и правильно отображает метки.

Эффект многократного использования лучше, безопаснее и проще в использовании, чем настраиваемый модуль визуализации, использующий отражение.

Сначала обязательно скомпилируйте Android 9.0 (Target Frameowrk) и обновите библиотеки поддержки Xamarin Android до версии 28 +.

В коде платформы (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)

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>

Подробнее об эффектах здесь

Полное руководство от Джеймса Монтемагно здесь < / а>

person GiampaoloGabba    schedule 11.06.2019
comment
оба ответа, которые у вас есть, полностью функциональны и используются всеми, кто хочет исправить описанное вами поведение. Пожалуйста, опубликуйте больше кода и подробностей об ошибках, иначе мы не сможем вам помочь - person GiampaoloGabba; 12.06.2019
comment
Спасибо. но это просто не работает. как раньше . Нет ошибки. Извините за мой английский - person negar ghasemi; 13.06.2019