2017-05-26 30 views
1

私はTabbedPageを私のXamarin.Formsアプリ(Xamarin.Formsバージョン:2.3.5.239-pre3)のメインページとして使用しています。私のMainActivityはFormsAppCompatActivityから継承しています。Xamarin.FormsでTabbedPageのタブ項目をカスタマイズする方法は?

ようTabbedPageに追加タイプの4ページContentPageがあります。今、私は変更する必要が

enter image description here

:しかし、タブがのように表示され

<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は常にnullです。

答えて

1

あなたはActionBarではなくTabLayoutを探しているはずです。最後に私はあなたがそうのようにそれを得ることができる必要がありますので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

ありがとう、本当にありがとう! :) –

関連する問題