使用自定义视图自定义 More-Tab
Custom More-Tab with Custom View
我正在开发一个复杂的应用程序,并利用 Xamarin.Forms.Shell 的优势进行布局和导航。现在有一些烦人的事情我还没有找到解决办法。
应用程序本身及其内容是德语的。有没有一种干净的方法可以将 hard-coded“更多”tab-text 更改为德语翻译(“Mehr”)?
尽管 More-tab 非常好,但不符合我对应用程序布局的需求。按下它时,我想显示一个视图,其中包含的不仅仅是带有标签的图标列表。我想将视图分成带有标题的部分,在这些标题中我想显示该部分的连贯页面。最简单的方法是用 singlepage-tab 替换多页 -"More-Tab" 并按照描述设计页面,但我喜欢 More-tab 的 Menu-Appearance 并且我如果可能的话,我想保留它。
在此先感谢您的帮助或建议。
您可以自定义ShellRenderer来修改更多选项卡的Text
。
Android中的CustomShellRenderer.cs
解决方法:
public class CustomShellRenderer : ShellRenderer
{
public CustomShellRenderer(Context context) : base(context)
{
}
protected override IShellBottomNavViewAppearanceTracker CreateBottomNavViewAppearanceTracker(ShellItem shellItem)
{
return new MarginedTabBarAppearance();
}
}
public class MarginedTabBarAppearance : IShellBottomNavViewAppearanceTracker
{
public void Dispose()
{
}
public void ResetAppearance(BottomNavigationView bottomView)
{
}
public void SetAppearance(BottomNavigationView bottomView, ShellAppearance appearance)
{
}
public void SetAppearance(BottomNavigationView bottomView, IShellAppearanceElement appearance)
{
if(null != bottomView.Menu.GetItem(4))
{
IMenuItem menuItem = bottomView.Menu.GetItem(4);
menuItem.SetTitle(Resource.String.More);
}
}
}
strings.xml:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="More">Mehr</string>
</resources>
效果:
iOS中的CustomShellRenderer.cs
解决方法:
public class CustomShellRenderer: ShellRenderer
{
protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
{
return new TabBarAppearance();
}
}
public class TabBarAppearance : IShellTabBarAppearanceTracker
{
public void Dispose()
{
}
public void ResetAppearance(UITabBarController controller)
{
}
public void SetAppearance(UITabBarController controller, ShellAppearance appearance)
{
}
public void UpdateLayout(UITabBarController controller)
{
UITabBar tb = controller.MoreNavigationController.TabBarController.TabBar;
if (tb.Subviews.Length > 4)
{
UIView tbb = tb.Subviews[4];
UILabel label = (UILabel)tbb.Subviews[1];
label.Text = "Mehr";
}
}
}
效果:
以上代码基于this official sample project(Xamarin.Forms - Xaminals).
我正在开发一个复杂的应用程序,并利用 Xamarin.Forms.Shell 的优势进行布局和导航。现在有一些烦人的事情我还没有找到解决办法。
应用程序本身及其内容是德语的。有没有一种干净的方法可以将 hard-coded“更多”tab-text 更改为德语翻译(“Mehr”)?
尽管 More-tab 非常好,但不符合我对应用程序布局的需求。按下它时,我想显示一个视图,其中包含的不仅仅是带有标签的图标列表。我想将视图分成带有标题的部分,在这些标题中我想显示该部分的连贯页面。最简单的方法是用 singlepage-tab 替换多页 -"More-Tab" 并按照描述设计页面,但我喜欢 More-tab 的 Menu-Appearance 并且我如果可能的话,我想保留它。
在此先感谢您的帮助或建议。
您可以自定义ShellRenderer来修改更多选项卡的Text
。
Android中的CustomShellRenderer.cs
解决方法:
public class CustomShellRenderer : ShellRenderer
{
public CustomShellRenderer(Context context) : base(context)
{
}
protected override IShellBottomNavViewAppearanceTracker CreateBottomNavViewAppearanceTracker(ShellItem shellItem)
{
return new MarginedTabBarAppearance();
}
}
public class MarginedTabBarAppearance : IShellBottomNavViewAppearanceTracker
{
public void Dispose()
{
}
public void ResetAppearance(BottomNavigationView bottomView)
{
}
public void SetAppearance(BottomNavigationView bottomView, ShellAppearance appearance)
{
}
public void SetAppearance(BottomNavigationView bottomView, IShellAppearanceElement appearance)
{
if(null != bottomView.Menu.GetItem(4))
{
IMenuItem menuItem = bottomView.Menu.GetItem(4);
menuItem.SetTitle(Resource.String.More);
}
}
}
strings.xml:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="More">Mehr</string>
</resources>
效果:
iOS中的CustomShellRenderer.cs
解决方法:
public class CustomShellRenderer: ShellRenderer
{
protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
{
return new TabBarAppearance();
}
}
public class TabBarAppearance : IShellTabBarAppearanceTracker
{
public void Dispose()
{
}
public void ResetAppearance(UITabBarController controller)
{
}
public void SetAppearance(UITabBarController controller, ShellAppearance appearance)
{
}
public void UpdateLayout(UITabBarController controller)
{
UITabBar tb = controller.MoreNavigationController.TabBarController.TabBar;
if (tb.Subviews.Length > 4)
{
UIView tbb = tb.Subviews[4];
UILabel label = (UILabel)tbb.Subviews[1];
label.Text = "Mehr";
}
}
}
效果:
以上代码基于this official sample project(Xamarin.Forms - Xaminals).