首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin ActionBar隐藏显示选项卡问题

Xamarin ActionBar隐藏显示选项卡问题
EN

Stack Overflow用户
提问于 2016-11-29 23:27:20
回答 1查看 263关注 0票数 0

我正在研究使用自定义TabbedRenderer在安卓系统的ActionBar中动态隐藏和显示选项卡的能力。在横向,我隐藏了标签,因为我可以并排放入补充内容。在肖像中,我显示选项卡,以便用户可以单击该选项卡来查看补充内容。渲染器通过更改ActionBar NavigationMode实现隐藏和显示,如下所示:

代码语言:javascript
运行
复制
void HideShowTabs()
{
    var actionBar = ((Activity)Context).ActionBar;

    if ((Element as MyTabbedPage).IsTabBarVisible)
    {
        if (actionBar.NavigationMode != ActionBarNavigationMode.Tabs)
            actionBar.NavigationMode = ActionBarNavigationMode.Tabs;
    }
    else if (actionBar.NavigationMode == ActionBarNavigationMode.Tabs)
        actionBar.NavigationMode = ActionBarNavigationMode.Standard;

}

问题是,当我从NavigationMode = Standard切换到NavigationMode = Tabs时,标签现在会覆盖主导航栏中的标题,如下所示。

开始画像(好):

然后是景观(好):

然后回到肖像(Bad):

感谢您对如何更正的任何建议。

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 00:51:37

事实证明,我的问题是时机问题。我触发了Xamarin Forms TabbedPage派生类(元素)的SizeChanged事件中的隐藏/显示。该事件计算屏幕方向并根据结果设置IsTabBarVisible属性。

TabbedRenderer订阅了元素的PropertyChanged事件,监视IsTabBarVisible属性的更改。当检测到IsTabBarVisible属性中的更改时,会在渲染器中调用上面的HideShowTabs()方法。

当我在渲染器中保留所有逻辑时,这个问题就消失了。通过覆盖OnConfigurationChanged,我使用原始HideShowTabs()方法中的相同逻辑检查方向更改并相应地隐藏/显示选项卡。

虽然这会降低渲染器的灵活性,但它暂时解决了我的问题。我必须找到一种更好的方法来计算NavigationMode更改的时间,以便正确地呈现它。如果我以错误的方式处理这件事,请接受建议。谢谢。

代码语言:javascript
运行
复制
protected override void OnConfigurationChanged(Configuration newConfig)
    {
        var actionBar = ((Activity)Context).ActionBar;

        if (Android.Content.Res.Orientation.Landscape == Resources.Configuration.Orientation)
        {
            if (actionBar.NavigationMode == ActionBarNavigationMode.Tabs)
            {
                actionBar.NavigationMode = ActionBarNavigationMode.Standard;
            }
        }
        else
        {
            if (actionBar.NavigationMode != ActionBarNavigationMode.Tabs)
            {
                actionBar.NavigationMode = ActionBarNavigationMode.Tabs;
            }
        }

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

https://stackoverflow.com/questions/40869597

复制
相关文章

相似问题

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