如何使用Xamarin Forms更改导航页面标题的字体?

时间:2018-01-29 08:22:33

标签: xamarin xamarin.forms xamarin.ios xamarin.android

我可以像这样更改字体颜色:

var homePage = new NavigationPage(new HomePage())
{ 
   Title = "Home",
   Icon = "ionicons_2_0_1_home_outline_25.png",
   BarTextColor = Color.Gray,
};

但有没有办法改变标题的字体。我想仅针对iOS和Android平台进行更改。希望有人知道自定义渲染器代码可以帮助我做到这一点。

2 个答案:

答案 0 :(得分:3)

您需要自定义渲染器,请参阅this sample

的iOS

[assembly: ExportRenderer(typeof(CustomNavigationPage), typeof(CustomNavigationPageRenderer))]
namespace CustomFontsNavigationPage.iOS.Renderers
{
public class CustomNavigationPageRenderer : NavigationRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            var att = new UITextAttributes();
            UIFont customFont = UIFont.FromName("Trashtalk", 20);
            UIFont systemFont = UIFont.SystemFontOfSize(20.0);
            UIFont systemBoldFont = UIFont.SystemFontOfSize(20.0 , FontAttributes.Bold);
            att.Font = font;
            UINavigationBar.Appearance.SetTitleTextAttributes(att);
        }
    }
}
}

的Android

[assembly: ExportRenderer(typeof(CustomNavigationPage), typeof(CustomNavigationPageRenderer))]
namespace CustomFontsNavigationPage.Droid.Renderers
{
public class CustomNavigationPageRenderer : NavigationPageRenderer
{
    private Android.Support.V7.Widget.Toolbar _toolbar;

    public override void OnViewAdded(Android.Views.View child)
    {
        base.OnViewAdded(child);

        if (child.GetType() == typeof(Android.Support.V7.Widget.Toolbar))
        {
            _toolbar = (Android.Support.V7.Widget.Toolbar)child;
            _toolbar.ChildViewAdded += Toolbar_ChildViewAdded;
        }
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        if(disposing)
        {
            _toolbar.ChildViewAdded -= Toolbar_ChildViewAdded;
        }
    }

    private void Toolbar_ChildViewAdded(object sender, ChildViewAddedEventArgs e)
    {
        var view = e.Child.GetType();

        if (e.Child.GetType() == typeof(Android.Widget.TextView))
        {
            var textView = (Android.Widget.TextView)e.Child;
            var spaceFont = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, "Trashtalk.ttf");
            var systemFont = Typeface.DEFAULT;
            var systemBoldFont = Typeface.DEFAULT_BOLD;
            textView.Typeface = spaceFont;
            _toolbar.ChildViewAdded -= Toolbar_ChildViewAdded;
        }
    }
}
}

答案 1 :(得分:0)

iOS上不需要自定义渲染器,只需使用Appearance API:

UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
{
     Font = UIFont.FromName("MyCoolFont", 20)
});

在Android中,您确实需要渲染器,但是应检查Android.Support.V7.Widget.AppCompatTextView而不是Android.Widget.TextView

在Xamarin.Forms 3.4.0上测试

相关问题