3

我使用TabbedPage作为我的 Xamarin.Forms 应用程序的 MainPage(Xamarin.Forms 版本:2.3.5.239-pre3)。我的 MainActivity 继承自FormsAppCompatActivity

有四个ContentPage类型的页面添加到 TabbedPage 中,例如:

<TabbedPage ... >    

   <pages:FirstPage Title="Testpage1" Icon="icon.png" />
   <pages:SecondPage Title="Testpage2"  Icon="icon.png" />
   <pages:ThirdPage Title="Testpage3"  Icon="icon.png" />
   <pages:FourthPage Title="Testpage3"  Icon="icon.png" />

</TabbedPage>

但是,选项卡显示如下:

在此处输入图像描述

现在我需要更改 title 属性的字体大小,以便显示整个标题。最好的方法是什么?我尝试了CustomRenderer,但不知道如何访问选项卡项。

我试过了:

      [assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTab))]
       namespace AdvancedForms.Droid.CustomRenderer
       {
            public class CustomTab : TabbedRenderer
            {
                protected override void DispatchDraw(Canvas canvas)
                {    
                  base.DispatchDraw(canvas);
                  ActionBar actionBar = activity.ActionBar;
                  // Do Stuff here
                }
            }
        }

但 activity.ActionBar 始终为空。

4

2 回答 2

4

您应该寻找 TabLayout,而不是 ActionBar。最后我检查了 TabLayout 是渲染器视图层次结构中的第二个孩子,所以你应该能够像这样得到它:

var tabLayout = (TabLayout)GetChildAt(1);

一旦你有了,你需要遍历各个选项卡并将所需的字体大小应用于每个选项卡的文本视图。

有用的提示,视图层次结构如下所示:

MsiTabbedRenderer
    FormsViewPager
    TabLayout
        SlidingTabStrip
            TabView
                AppCompatImageView
                AppCompatTextView
            TabView
                AppCompatImageView
                AppCompatTextView
            TabView
                AppCompatImageView
                AppCompatTextView
            ...

我用来生成此信息的方法如下所示,供您欣赏:

    public static void DebugLayout(this View self, int indent = 0)
    {
        // write info about me first
        var indents = new string('\t', indent);
        System.Diagnostics.Debug.WriteLine(indents + self.GetType().Name);

        // check if I'm a view group
        var vg = self as ViewGroup;
        if (vg == null) return;

        // enumerate my children
        var children = Enumerable.Range(0, vg.ChildCount).Select(x => vg.GetChildAt(x));

        // recurse on each child
        foreach (var child in children)
            DebugLayout(child, indent+1);
    }
于 2017-05-26T15:39:37.113 回答
0

对于自定义选项卡视图/页面,我使用的是 xam.Tabview (Xamarin.Forms) 组件,它按预期工作。它支持自定义标题和内容视图。

安装 Nuget:TabView Nuget

示例:Tabview 示例

于 2019-08-28T14:32:01.610 回答