如何强制 Xamarin Forms TabbedPage 在 Android 上以编程方式滚动到选定的选项卡?

Dpe*_*nha 0 xamarin.android xamarin.forms

如果我有更多的选项卡而不适合屏幕,在 Android 上我可以将选项卡模式设置为可滚动。但是,如果我以编程方式将所选项目(使用 SelectedItem 或 CurrentPage)设置为屏幕外的选项卡,在 Android 上,选项卡不会滚动。

在 UWP 上它工作正常,在 iOS 上它不起作用,因为它使用“更多”按钮。但在 Android 上,它会选择正确的 Child,显示其内容,但不会将选项卡滚动到正确的选项卡(如果它不在屏幕上)。

如果我手动滚动选项卡,则会选择正确的选项卡,但这种用户体验非常糟糕。

显然是 Xamarin Forms 的一个错误,但我不希望很快有任何变化,所以关于如何以编程方式滚动选项卡的任何想法?

这是带有示例应用程序的错误报告以查看问题。

https://bugzilla.xamarin.com/show_bug.cgi?id=58441

Yor*_*hen 5

但是,如果我以编程方式将所选项目(使用 SelectedItem 或 CurrentPage)设置为屏幕外的选项卡,在 Android 上,选项卡不会滚动。像这样的代码:

您可以在 Xamarin.Android 中编写TabbedPageRenderer,将选项卡滚动到右侧选项卡。

 public class MyTabbedPageRenderer : TabbedPageRenderer
 {
     private TabLayout tabLayout = null;

     protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
     {
         base.OnElementChanged(e);

         this.tabLayout = (TabLayout)this.GetChildAt(1);

         var selectPosition = this.tabLayout.SelectedTabPosition;

         tabLayout.TabMode = TabLayout.ModeScrollable;
         tabLayout.TabGravity = TabLayout.GravityFill;

         Handler h = new Handler();
         Action myAction = () =>
         {
             tabLayout.GetTabAt(selectPosition).Select();
         };

         h.PostDelayed(myAction, 1);
     }
 }
Run Code Online (Sandbox Code Playgroud)

影响 :

在此处输入图片说明