XAMAR在XAML中更改字体

问题描述 投票:3回答:3

如何在Xamarin.Forms XAML中更改标签的字体?

XAML中的字体系列属性没有预测。

我在字体系列中尝试了2或3种类似'Arial'的字体,但它不起作用。

帮我解决这个问题。

<StackLayout Orientation="Vertical">
        <Label Text="Welcome  !"
            VerticalOptions="Start" 
            HorizontalOptions="StartAndExpand"
            FontFamily="Arial" 
        />


</StackLayout>
xamarin xamarin.forms xamarin.android
3个回答
2
投票

存储ttf文件位置

  1. Android:YouNameSpace.Droid / Assets / Poppins-Light.ttf
  2. Ios:YouNameSpace.iOS / Resources / fonts / Poppins-Light.ttf
  3. for iOS需要在info.plist文件中放入以下行 enter image description here

在App.xaml中创建静态资源

<Application.Resources>
<ResourceDictionary> 
         <!-- FontFamily -->
        <OnPlatform x:Key="PoppinsBold"
                    x:TypeArguments="x:String"
                    iOS="Poppins-Bold"
                    Android="Poppins-Bold.ttf#Poppins"/>

        <OnPlatform x:Key="PoppinsLight"
                    x:TypeArguments="x:String"
                    iOS="Poppins-Light"
                    Android="Poppins-Light.ttf#Poppins" />

         <!-- style for Lable -->
         <Style x:Key="PoppinsBoldLabelStyle"
               TargetType="{x:Type Label}">
            <Setter Property="FontFamily"
             Value="{StaticResource PoppinsBold}" />
        </Style>

        <Style x:Key="PoppinsLightLabelStyle"
               TargetType="{x:Type Label}">
            <Setter Property="FontFamily"
             Value="{StaticResource PoppinsLight}" />
        </Style>
</ResourceDictionary>
</Application.Resources>

在Label中使用静态资源

<Label Text="Hello"  Style="{StaticResource PoppinsBoldLabelStyle}"/>

0
投票

请参考thishere是官方演示。

或者你可以使用Custom renderers


Here下载Arial,并把你的Assets/Fonts文件夹。

你的PCL中的MyLabel

namespace FontTes
{
    public class MyLabel:Label
    {
    }
}

你的Android平台上的MyLabelRender

using Android.Content;
using Android.Graphics;
using Android.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(FontTes.MyLabel), typeof(FontTes.Droid.MyLabelRender))]
namespace FontTes.Droid
{
    class MyLabelRender: LabelRenderer
    {
        public MyLabelRender(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            var label = (TextView)Control;
            label.Typeface = Typeface.CreateFromAsset(Android.App.Application.Context.Assets, "Fonts/arial.ttf");

        }
    }
}

PCL's MainPage.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:FontTes;assembly=FontTes"
             x:Class="FontTes.MainPage">
    <StackLayout>

    <Label Text="Welcome to Xamarin.Forms!" 
           VerticalOptions="Center" 
           HorizontalOptions="Center"/>
        <local:MyLabel
          Text="Welcome to Xamarin.Forms!" 
           VerticalOptions="Center" 
           HorizontalOptions="Center"/>
    </StackLayout>
</ContentPage>

0
投票

我通过复制Android的“Assets”文件夹中的字体解决了这个问题,并将代码更改为:

 <StackLayout Orientation="Vertical">

        <Label Text="Hello Forms with XAML" FontFamily="ariblk.ttf#ariblk"/>
        <Label Text="New Line following the first line " FontFamily="chiller.ttf#chiller" />

 </StackLayout>
© www.soinside.com 2019 - 2024. All rights reserved.