2017-05-26 124 views
1

我正在使用TabbedPage作爲我的Xamarin.Forms應用程序的主頁(Xamarin.Forms版本:2.3.5.239-pre3)。我的MainActivity繼承自FormsAppCompatActivity如何在Xamarin.Forms中自定義TabbedPage的Tab項目?

有四頁類型的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> 

然而,選項卡顯示如下:

enter image description here

現在我需要改變標題屬性的字體大小,因此將顯示整個標題。什麼是最好的方法來做到這一點?我嘗試了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總是空。

回答

1

你應該尋找一個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); 
    } 
+0

你好,不好意思的回答晚了!您的建議對我來說效果很好,謝謝! :) 你從哪裏得到這個層次結構視圖?有什麼好的工具可以看到這些視圖嗎? –

+0

我添加了擴展方法我用來生成我的視圖佈局「作弊表」 –

+0

謝謝,我真的很感激! :) –

相關問題