Xamarin Android BottomNavigationView 在旋转时不可见
Xamarin Android BottomNavigationView invisible when Rotation
您好,我有这个应用程序,我需要 bottomTabBar 在设备旋转时消失。问题是每次我旋转它都无法按我想要的方式工作。
这是我的代码:
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, 0, 0, -1);
}
else
{
bottomView.Visibility = ViewStates.Visible;
var parameters = bottomView.LayoutParameters;
parameters.Height = 200;
bottomView.LayoutParameters = parameters;
bottomView.SetPadding(0, 0, 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, 0, 0, -1);
}
else
{
bv.Visibility = ViewStates.Visible;
var parameters = bv.LayoutParameters;
parameters.Height = 200;
bv.LayoutParameters = parameters;
bv.SetPadding(0, 0, 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
所做的那样做类似的事情。
您好,我有这个应用程序,我需要 bottomTabBar 在设备旋转时消失。问题是每次我旋转它都无法按我想要的方式工作。
这是我的代码:
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, 0, 0, -1);
}
else
{
bottomView.Visibility = ViewStates.Visible;
var parameters = bottomView.LayoutParameters;
parameters.Height = 200;
bottomView.LayoutParameters = parameters;
bottomView.SetPadding(0, 0, 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, 0, 0, -1);
}
else
{
bv.Visibility = ViewStates.Visible;
var parameters = bv.LayoutParameters;
parameters.Height = 200;
bv.LayoutParameters = parameters;
bv.SetPadding(0, 0, 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
所做的那样做类似的事情。