簡體   English   中英

如何在Xamarin.Forms中自定義TabbedPage的Tab-Items?

[英]How to customize the TabbedPage's Tab-Items in Xamarin.Forms?

我正在使用TabbedPage作為我的Xamarin.Forms應用程序的主頁(Xamarin.Forms版本:2.3.5.239-pre3)。 我的MainActivity繼承自FormsAppCompatActivity

在TabbedPage中添加了四頁ContentPage類型的頁面,如:

<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,但我無法弄清楚如何訪問tab-items。

我試過了:

      [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始終為null。

您應該尋找TabLayout,而不是ActionBar。 最后我檢查了TabLayout是渲染器視圖層次結構中的第二個子節點,所以你應該能夠像這樣得到它:

var tabLayout = (TabLayout)GetChildAt(1);

完成后,您需要遍歷各個選項卡,並將所需的字體大小應用於每個選項卡的textview。

有用的提示,視圖層次結構如下所示:

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);
    }

對於自定義選項卡視圖/頁面,我正在使用xam.Tabview(Xamarin.Forms)組件,它正在按預期工作。 它支持自定義標題和內容視圖。

安裝Nuget: TabView Nuget

示例: Tabview示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM