问题描述
您好,我有这个应用程序,我需要在旋转设备时使底部标签栏消失。问题是每次我旋转它都不能按我想要的方式工作。
这是我的代码:
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);
}
}
这是人像模式
解决方法
我使用了您的实现,当我旋转屏幕时从未调用 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
所做的那样做类似的事情。