带有自定义视图的自定义更多选项卡

问题描述

我正在开发一个复杂的应用程序,并利用 Xamarin.Forms.Shell 的优势进行布局和导航。现在有一些烦人的事情我还没有找到解决办法。

应用程序本身及其内容是德语。是否有一种干净的方法可以将硬编码的“更多”选项卡文本更改为其德语翻译(“Mehr”)?

尽管更多选项卡非常好,但它不符合我对应用程序布局的需求。按下它时,我想显示一个视图,该视图不仅仅包含带有标签的图标列表。我想将视图分成带有标题的部分,在这标题中我想显示该部分的连贯页面。最简单的方法是用单页选项卡替换多页“更多选项卡”,然后按照描述设计页面,但我喜欢“更多”选项卡的菜单外观,如果可能的话,我想保留它。

预先感谢您的任何帮助或建议。

解决方法

您可以自定义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>

效果:

enter image description here

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";
        }
    }
}

效果:

enter image description here

以上代码基于this official sample project(Xamarin.Forms - Xaminals)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...