c# - 旋转时Xamarin Android BottomNavigationView不可见
问题描述
您好,我有这个应用程序,我需要在设备旋转时让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
.
推荐阅读
- android - 从android上的服务器获取数据
- git - 致命:远程端在初始推送到 bitbucket 时意外挂断
- spring-boot - 无法识别的 id 类型:pg-uuid -> java.util.UUID
- python - Python3.9:关于python sys路径部署应用程序的正确方法是什么
- angular - Angular ngFor over Map 与原始地图顺序中的键值管道
- android - 电话号码自动填充
- c# - 在 Linq Select() 中调用方法而不加载整个对象
- javascript - 尝试使用 MongoDB 选择具有相同 ID 的每个文档
- python - 如何在 Django 和 MQTT 之间转移价值
- python - 如何使xmlrpc服务器多线程?