android - 在 android 上的 tabclick FreshTabbedNavigationContainer 上弹出到根目录
问题描述
考虑一个带有“主页”和“个人资料”按钮的标签栏,当我单击任一页面时,我在两个页面之间切换,在“主页”页面上,用户可以在导航堆栈中向上导航多次,但仍将焦点放在“主页”选项卡上表明这是用户来自的地方。
现在,在 iOS 上,每当用户从导航堆栈的高处单击“主页”时,用户就会弹出到 root 并且一切都很好,但在 android 上并非如此,在 android 上,用户必须一次弹出一页通过单击后退按钮进入根目录。
这是预期的行为吗,我做错了什么,有人知道我可以做些什么来获得所需的行为吗?
解决方案
这是 iOS 和 Android 之间的预期行为。
如果你需要让 Android 和 iOS 有同样的效果,你需要自定义TabbedPageRenderer来实现。并且底部标签栏效果可以自定义一个FreshTabbedNavigationContainer。最后,我们将使用MessagingCenter将消息发送到 Forms 以弹出到 Root Page。
例如,CustomFreshTabbedNavigationContainer类:
public class CustomFreshTabbedNavigationContainer : FreshTabbedNavigationContainer
{
public CustomFreshTabbedNavigationContainer()
{
On<Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);
MessagingCenter.Subscribe<object>(this, "Hi", (sender) =>
{
// Do something whenever the "Hi" message is received
PopToRoot(true);
});
}
}
在App.xaml.cs中使用:
public App()
{
InitializeComponent();
var container = new CustomFreshTabbedNavigationContainer();
container.AddTab<FirstPageModel>("Home", default);
container.AddTab<ProfilePageModel>("Profile", default);
MainPage = container;
}
现在我们将在 Android 中创建一个CustomTabbedPageRenderer :
public class CustomTabbedPageRenderer : TabbedPageRenderer, BottomNavigationView.IOnNavigationItemSelectedListener
{
public CustomTabbedPageRenderer(Context context) : base(context)
{
}
int previousItemId = 0;
bool BottomNavigationView.IOnNavigationItemSelectedListener.OnNavigationItemSelected(IMenuItem item)
{
base.OnNavigationItemSelected(item);
if (item.IsChecked)
{
if (previousItemId != item.ItemId)
{
previousItemId = item.ItemId;
}
else
{
Console.WriteLine("ok");
MessagingCenter.Send<object>(this, "Hi");
}
}
return true;
}
}
效果:
注意:如果需要和Android中的顶部Tabbar一样的效果,在CustomTabbedPageRenderer
. 你可以看看这个讨论。
推荐阅读
- android - 如何在 onTouch() 中等待 n 毫秒?
- python - ValueError:无法将字符串转换为浮点数:(在python中)
- laravel-valet - Laravel Livewire - 502 错误网关
- python - 使用正则表达式拆分 aa 字符串中的括号
- node.js - 如何在使用 Google Oauth (passportjs) 的 React 应用程序上存储和验证
- java - 迭代 fastutil 原始 ArrayList 的最佳实践,例如 IntArrayList?
- java - Java 字符串格式化正则表达式模式
- python - 由于合并了 plotly.express,执行使用 tkinter 和 py2app 创建的 Mac 应用程序出现问题
- swift - 如何做一个 SwiftUI 的“一步一步”动画?
- laravel - modal 中的 Laravel 帖子尝试使用 GET 而不是 POST