如何在 Xamarin ActionBar 标题中设置自定义字体系列?

Posted

技术标签:

【中文标题】如何在 Xamarin ActionBar 标题中设置自定义字体系列?【英文标题】:How to Set a Custom Font Family in the Xamarin ActionBar Title? 【发布时间】:2018-02-22 18:37:39 【问题描述】:

如标题。我在Custom Fonts in Xamarin.Forms NavigationBar + ActionBar 找到了如何做到这一点的想法,它告诉在style.xml 文件中定义它,但我无法获得自定义字体系列。

所以我现在的风格是这样的:

 <style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<!--set your custom font properties-->
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">HelveticaNeue Medium.ttf</item>
<item name="android:textColor">@android:color/white</item>

【问题讨论】:

【参考方案1】:

为此,您可以在 android 中创建自定义渲染器。渲染器只需使用您的 android 项目中定义的资源更改导航栏的字体。您可以在android中使用以下渲染器:

[assembly: ExportRenderer(typeof(NavigationPage), typeof(AndroidNavigationRenderer))]
namespace Xamarin.Droid.DependencyServices

  public class AndroidNavigationRenderer : 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;
        
    

    private void Toolbar_ChildViewAdded(object sender, ChildViewAddedEventArgs e)
    
        var view = e.Child.GetType();
        if (e.Child.GetType() == typeof(Android.Support.V7.Widget.AppCompatTextView))
        
            var textView = (Android.Support.V7.Widget.AppCompatTextView)e.Child;
            textView.Typeface = Typeface.CreateFromAsset(this.Context.Assets, "fonts/QuicksandRegular.ttf");

            toolbar.ChildViewAdded -= Toolbar_ChildViewAdded;
        
    
  

对于 UWP,您可以在 app.xaml 中定义自定义样式以覆盖标题栏的默认样式。您可以在 UWP 中使用以下代码:

 <Style x:Key="TitleTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="18"/>
    <Setter Property="FontStyle" Value="Normal"/>
    <Setter Property="FontWeight" Value="SemiBold"/>
    <Setter Property="FontFamily" Value="Assets/Fonts/QuicksandRegular.ttf#Quicksand"/>
    <Setter Property="Padding" Value="10"/>
 </Style>

只需将字体系列更改为您选择的字体系列。

【讨论】:

以上是关于如何在 Xamarin ActionBar 标题中设置自定义字体系列?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xamarin Studio 将 Lollipop Toolbar 添加到我的项目

Listview隐藏在ActionBar后面

Android 如何隐藏ActionBar,保留标题栏

如何在 ActionBar 中同时显示图标和动作标题?

如何在 ActionBar 中显示 Android Cast 按钮

如何获得 ActionBar 的高度?