微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

旋转时 Xamarin Android BottomNavigationView 不可见

如何解决旋转时 Xamarin Android BottomNavigationView 不可见

您好,我有这个应用程序,我需要在旋转设备时使底部标签栏消失。问题是每次我旋转它都不能按我想要的方式工作。

这是我的代码

 public override void SetAppearance(BottomNavigationView bottomView,IShellAppearanceElement appearance)
    {
        if (_bottomNavigationView == null)
            _bottomNavigationView = bottomView;

        if (bottomViewHeight == 0)
            bottomViewHeight = bottomView.LayoutParameters.Height;
        _IShellAppearanceElement = appearance;

        var maindisplayInfo = Devicedisplay.MaindisplayInfo;
        var rotation = maindisplayInfo.Rotation;

        if (rotation == displayRotation.Rotation270 || rotation == displayRotation.Rotation90)
        {
            var parameters = bottomView.LayoutParameters;
            parameters.Height = 0;
            bottomView.LayoutParameters = parameters;
            bottomView.Visibility = ViewStates.Invisible;
            bottomView.SetPadding(0,-1);
        }
        else
        {
            bottomView.Visibility = ViewStates.Visible;
            var parameters = bottomView.LayoutParameters;
            parameters.Height = 200;
            bottomView.LayoutParameters = parameters;
            bottomView.SetPadding(0,100);
        }
    }

这是人像模式

this is portrait mode

这是横向模式

enter image description here

enter image description here

这是回到纵向模式

解决方法

我使用了您的实现,当我旋转屏幕时从未调用 SetAppearance。它仅在视图更改时调用(例如,我单击选项卡或其他内容)。我会仔细检查在您的情况下,每次更改屏幕方向时是否真的调用了该方法,就像您说的那样。

另一方面,通过覆盖 OnConfigurationChanged 方法,我能够获得您想要的行为。 不知道你的其余代码是什么样子,但你可以像我一样做一些事情。 在 MainActivity 中,我添加了 static public BottomNavigationView bv;OnConfigurationChanged 的实现:

        public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
        {
            base.OnConfigurationChanged(newConfig);
            if (bv != null)
            {
                if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
                { 
                    var parameters = bv.LayoutParameters;
                    parameters.Height = 0;
                    bv.LayoutParameters = parameters;
                    bv.Visibility = ViewStates.Invisible;
                    bv.SetPadding(0,-1);
                }
                else
                { 
                    bv.Visibility = ViewStates.Visible;
                    var parameters = bv.LayoutParameters;
                    parameters.Height = 200;
                    bv.LayoutParameters = parameters;
                    bv.SetPadding(0,100);
                }
            }
        }

然后,在我实现 IShellBottomNavViewAppearanceTracker 的其他文件中(我猜你在某个地方有):

        public void SetAppearance(BottomNavigationView bottomView,ShellAppearance appearance)
        {
            //Some other code if necessary

            if (MainActivity.bv == null)
                MainActivity.bv = bottomView;

            //Some other code if necessary
        }

我不确定在您的情况下 _bottomNavigationView 是什么以及您如何使用它,但我想您可以像我对 bv 所做的那样做类似的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。