2017-08-29 3 views
1

Ich verwende eine Schriftart, um Symbole in meiner mobilen App anzuzeigen. Das Problem ist, Schriftart Symbol wird korrekt angezeigt, wenn ich es direkt in XAML-Datei schreiben, aber es funktioniert nicht, wenn ich es zur Laufzeit festlegen.Xamarin Forms: Schriftart-Symbol wird zur Laufzeit nicht gerendert

Ich habe das Schriftartensymbol implementiert, indem ich für jede Plattform ein Custom Label-Steuerelement und einen Custom Renderer erstellt habe. Ich stehe dieses Problem auf Android, habe noch nicht auf iOS überprüft.

Benutzerdefinierte Label:

using System; 
using Xamarin.Forms; 

namespace fonticon 
{ 
    public class IconLabel:Label 
    { 
     public IconLabel() 
     { 
     } 
    } 
} 

Individuelle Renderer für Android:

using System; 
using Android.Graphics; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 

// This informs the compiler that we're using this class to render an IconLabel on this platform 
[assembly: ExportRenderer(typeof(fonticon.IconLabel), typeof(fonticon.Droid.IconLabelRenderer))] 
namespace fonticon.Droid 
{ 
    public class IconLabelRenderer:LabelRenderer 
    { 
     // sets the font for the platform-specific ui component to be our custom font 
     protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
     { 
      base.OnElementChanged(e); 
      // Note we're using the filename here, NOT the font family name 
      var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, "flatuiicons.ttf"); 
      Control.Typeface = font; 
     } 
    } 
} 

Nach XAML funktioniert:

<?xml version="1.0" encoding="utf-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:fonticon" 
    x:Class="fonticon.fonticonPage"> 

    <StackLayout x:Name="mainContainer"> 
     <local:IconLabel x:Name="lblTestIcon" Text="&#xe012;" VerticalOptions="Center" HorizontalOptions="Center" FontSize="40" /> 
    </StackLayout> 

</ContentPage> 

folgenden Code nicht funktioniert:

lblTestIcon.Text = "&#xe012;"; 

Quelle der Umsetzung folgt:

https://blog.bitbull.com/2017/05/10/using-a-custom-icon-font-in-xamarin-forms/comment-page-1/#comment-1209

+0

Sie Schritt 5 aus dem Artikel bedeckt Haben Sie auf dem Laufenden? Ich habe diesen Schritt ein paar Mal verpasst und es führt nur dazu, dass es die Schriftart-Pack nicht finden .... Schritt 5. Importieren Sie Ihre benutzerdefinierte Schriftart in Ihr Android-Projekt Klicken Sie mit der rechten Maustaste auf das Verzeichnis Assets in Ihrem Android-Projekt und wählen Sie "Dateien hinzufügen". Navigieren Sie zu der Schriftartdatei, die Sie auf Ihrer Festplatte ausgewählt haben, und fügen Sie sie dem Projekt hinzu. Sobald die Datei hinzugefügt wurde, klicken Sie mit der rechten Maustaste darauf und überprüfen Sie, ob "Build Action" auf "AndroidAsset" eingestellt ist. –

+0

Das Problem wird mit dem folgenden Code behoben, der im Artikel erwähnt wurde, aber irgendwie habe ich es verpasst. Text = System.Net.WebUtility.HtmlDecode ("& # xe012;"); – dsakpal

Antwort

0

Das Problem wird folgenden Code verwendet, die in dem Artikel gesagt wurde, aber irgendwie Ich habe es verpasst.

Text = System.Net.WebUtility.HtmlDecode ("&#xe012;"); 

Auch hinzugefügt, um die Android Benutzerdefinierte Renderer folgenden Code:

// sets the font for the platform-specific ui component to be our custom font 
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    base.OnElementPropertyChanged(sender, e); 

    // Note we're using the filename here, NOT the font family name 
    var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, "flatuiicons.ttf"); 
    Control.Typeface = font; 
} 
Verwandte Themen