2016-12-04 42 views
0

如何更改标签标题的样式?最重要的是,标题不会像截图一样截断。所以我必须改变标题的大小。 我开始为tabbedpage创建自定义渲染器,但我不知道如何继续。Xamarin Forms Android:TabbedPage字体样式

Xaml: 
<custom:CustomTabbedPage... 

Forms: 
public class CustomTabbedPage : TabbedPage... 

Forms.Droid 
public class CustomTabbedPageRenderer : TabbedPageRenderer 

TabbedPage具有带有ContentPages的NavigationPages。

如果您需要更多信息,请告诉我。谢谢。

enter image description here

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage" 
     x:Class="TabbedPageWithNavigationPage.MainPage"> 
<NavigationPage Title="Start" Icon="start.png"> 
    <x:Arguments> 
     <local:StartPage /> 
    </x:Arguments> 
</NavigationPage> 
<NavigationPage Title="Symptom-Tagebuch" Icon="tagebuch.png"> 
    <x:Arguments> 
     <local:TagebuchPage /> 
    </x:Arguments> 
</NavigationPage> 
... 

+0

没人? 因此,所有人都对切割标题感到满意,没有人改变过它。不能相信这一点。 ;) – Ralf

+0

你能不能展示一些代码,你是如何为'TabbedPage'创建每个项目的?我使用它的'ItemTemplate'来构建多个'ContentPage'的源集合,并通过'ContentPage'的'Title'属性指定每个项目的标题,它工作正常,标题不会被切断,所有样式都是默认的,所以我无法重现您的问题。 –

+0

@ GraceFeng-MSFT舒尔,我添加了一些代码从我的项目 – Ralf

回答

1

看来,对不同尺寸的设备的不同NavigationPage行为默认的标题样式。通过我对7" 侧奇巧模拟器,所以它看起来如此:

enter image description here

和5" 奇巧模拟器,所以它看起来如此:

enter image description here

或者它可能是版本的问题,这导致我的身边这个NavigationPage的行为与你的不同,我无法重现你的问题。无论如何,如果你想自定义你的NavigationPage的布局,你可以为你的android平台创建一个自定义渲染。欲了解更多信息,你可以参考官方文档Customizing Controls on Each Platform,如果你正在寻找演示,在官方论坛上有关于定制标题字体NavigationPage的讨论,你也可以看看:Discussion 1Discussion 2

另一种可能的解决问题的方法是,我认为你可以改变NavigationPageContentPage,并改变你的子页面内容视图,并通过这样做,你可以参考Xamarin.Forms: Can I embed one ContentPage or ContentView into another ContentPage

根据您的描述,也许通过创建自己的自定义渲染的第一个解决方案更适合您的方案。

+0

谢谢你,我发现了另一个解决方案,并且这些天会发布 – Ralf

+0

@Ralf你发现了什么?谢谢! –

0

你可以找到标题的通过TabLayout视图孩子CustomRendered TextView的,改变字体样式

[assembly: ExportRenderer(typeof(MainPage), typeof(BottomTabbedPageRenderer))] 
namespace Daddy.Droid 
{ 
    public class BottomTabbedPageRenderer : TabbedPageRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e) 
     { 
      base.OnElementChanged(e); 

      if (e.NewElement == null || e.OldElement != null) 
       return; 

      TabLayout tablayout = (TabLayout)ViewGroup.GetChildAt(1); 
      Android.Views.ViewGroup vgroup = (Android.Views.ViewGroup)tablayout.GetChildAt(0); 
      for (int i = 0; i < vgroup.ChildCount; i++) 
      { 
       Android.Views.ViewGroup vvgroup = (Android.Views.ViewGroup)vgroup.GetChildAt(i); 
       Typeface fontFace = Typeface.CreateFromAsset(this.Context.Assets, "IranSans.ttf"); 
       for (int j = 0; j < vvgroup.ChildCount; j++) 
       { 
        Android.Views.View vView = (Android.Views.View)vvgroup.GetChildAt(j); 
        if (vView.GetType() == typeof(Android.Support.V7.Widget.AppCompatTextView) || vView.GetType() == typeof(Android.Widget.TextView)) 
        { 
         //here change textview style 
         TextView txtView = (TextView)vView;       
         txtView.TextSize = 14f; 
         txtView.SetTypeface(fontFace, TypefaceStyle.Normal); 
        } 
       } 
      } 
     } 
    } 
}