首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义更多-带有自定义视图的Tab

自定义更多-带有自定义视图的Tab
EN

Stack Overflow用户
提问于 2021-01-29 23:32:30
回答 1查看 276关注 0票数 0

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

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

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

提前感谢您的帮助或建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-03 09:57:03

您可以自定义ShellRenderer来修改Text of More选项卡。

CustomShellRenderer.cs in Android解决方案:

代码语言:javascript
复制
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

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <string name="More">Mehr</string>
</resources>

效果:

CustomShellRenderer.cs in iOS解决方案:

代码语言:javascript
复制
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";
        }
    }
}

效果:

以上代码基于这个正式的样本项目(Xamarin.Forms- Xaminals)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65963097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档