Панель инструментов TabbedPage показывает активный ToolbarItem только тогда, когда ToolbarPlacement находится снизу и ContentPage count больше 4 - PullRequest
1 голос
/ 11 июня 2019

В версии 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 https://cdn1.imggmi.com/uploads/2019/6/11/150fe2463357f9008da3bed6d976d1bd-full.jpg

Мне нужно показать все заголовки страниц. что я должен сделать для этой проблемы?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы можете исправить это с помощью 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>

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

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

1 голос
/ 11 июня 2019

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

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

...