我正在使用Xamarin.Forms 4.0发布的shell将项目重构为新的导航,现在我正在迁移具有effect的tabbedPage 应用于从tabbedPage隐藏子项的标题而仅使图标可见的情况下,使用Shell,不再需要页面继承自TabbedPage,除非Shell自己的类允许您实现tabbedPage,masterPage ...问题在于,由于无法引用tabbedPage,现在我不知道如何应用以前使用的effect。
注意:在这种情况下,我使用Flyout,因为我需要一个带有汉堡菜单和tabbedPage的设计,这就是为什么我不只使用TabBar的原因。 / p>
<FlyoutItem Route="home"
Title="TEST"
Icon="home_icon"
FlyoutDisplayOptions="AsMultipleItems">
<ShellContent Route="bottomtab1"
Title="TEST1"
Icon="target_icon"
ContentTemplate="{DataTemplate views:x}" />
<ShellContent Route="bottomtab2"
Title="TEST2"
Icon="user_login"
ContentTemplate="{DataTemplate views:y}" />
</FlyoutItem>
答案 0 :(得分:0)
感谢GitHub的pfedotovsky用户,在Xamarin团队正式解决此问题之前,我找到了一个替代解决方案,in this article他对此进行了解释。
有一个针对带有自定义渲染器的Android解决方法。关键是要设置
_bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityAuto;要么 _bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityUnlabeled;
using Android.OS;
using Android.Support.Design.BottomNavigation;
using Android.Support.Design.Widget;
using Android.Views;
using Xamarin.Forms.Platform.Android;
namespace App.Droid
{
public class AndroidShellItemRenderer : ShellItemRenderer
{
BottomNavigationView _bottomView;
public AndroidShellItemRenderer(IShellContext shellContext) : base(shellContext)
{
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var outerlayout = base.OnCreateView(inflater, container, savedInstanceState);
_bottomView = outerlayout.FindViewById<BottomNavigationView>(Resource.Id.bottomtab_tabbar);
_bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityAuto;
return outerlayout;
}
}
}
要使用此渲染器,还需要创建自定义ShellRenderer:
using System;
using Android.Content;
using Conference.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Shell), typeof(AndroidShellRenderer))]
namespace App.Droid
{
public class AndroidShellRenderer : ShellRenderer
{
public AndroidShellRenderer(Context context)
: base(context)
{
}
protected override IShellItemRenderer CreateShellItemRenderer(ShellItem shellItem)
{
return new AndroidShellItemRenderer(this);
}
}
}