2017-01-17 5 views
1

Ich entwickle eine App, in der ich eine font.otf-Datei verwende. Meine App läuft auf Android, iOS, Windows 10 und Windows 8.1. Ich muss Stile für meine Etiketten erstellen, um die Schriftfamilie festzulegen. für Android und iOS I verwiesen diese linkXamarin Formen: Benutzerdefinierte Schriftarten in UWP und Windows 8.1

ich in XAML-Seite versucht, wie this-

<Label.FontFamily> 
     <OnPlatform x:TypeArguments="x:String"> 
      <OnPlatform.iOS></OnPlatform.iOS> 
      <OnPlatform.Android>Lobster-Regular.ttf#Lobster-Regular</OnPlatform.Android> 
      <OnPlatform.WinPhone></OnPlatform.WinPhone> 
     </OnPlatform> 
    </Label.FontFamily> 

new Label { 
    Text = "Hello, Forms!", 
    FontFamily = Device.OnPlatform (
     null, 
     null, 
     @"\Assets\Fonts\Lobster-Regular.ttf#Lobster-Regular" 
       // Windows Phone will use this custom font 
    ) 
} 

Aber wenn ich meine app laufen nicht Schriftart nicht für Windows 10 und 8.1 eingestellt.

Wie kann ich die Schriftfamilie für Windows 10 und 8.1 einstellen? Oder gibt es eine effizientere Möglichkeit, Schriftfamilie mit der Abdeckung aller Plattformen anzuwenden?

Antwort

2

Hinweis: gibt es einen Bug, bei dem custom fonts do not work, wenn Sie einen NavigationPage verwenden

Sie tun Sie benötigen keinen benutzerdefinierten Renderer für benutzerdefinierte Schriftarten unter Windows 8.1/UWP. der Xamarin Beispielcode hat einfach ein paar Fehler:

  • einen Schrägstrich verwenden (‚/‘) anstelle
  • Der Weg in Form von [font file]#[font name] sein sollte (ohne die Schriftart, zB ‚normale‘)

So ist der Weg in diesem Fall sollte

"Assets/Fonts/Lobster-Regular.ttf#Lobster" 

tatsächlich Und Sie können dies auch in XAML

012 verwenden
<OnPlatform.WinPhone>Assets/Fonts/Lobster-Regular.ttf#Lobster</OnPlatform.WinPhone> 

Stellen Sie sicher, dass Ihre Schriftartdatei in Ihrem Projekt mit BuildAction:Content enthalten ist, und es sollte funktionieren.

1

Sie könnten versuchen, eine CustomRenderer erstellen, die die Xamarin.Forms.Label auf der Windows-Plattform überschreibt wie so:

[assembly: ExportRenderer(typeof(Xamarin.Forms.Label), typeof(MyLabelRenderer))] 
namespace MyApp.CustomRenderers.Controls 
{ 
    public class MyLabelRenderer : LabelRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
     { 
      base.OnElementChanged(e); 

      if (Control != null) 
      { 
       var font = new FontFamily(@"\Assets\Fonts\Lobster-Regular.ttf#Lobster-Regular"); 

       if (e.NewElement != null) 
       { 
        switch (e.NewElement.FontAttributes) 
        { 
         case FontAttributes.None: 
          break; 
         case FontAttributes.Bold: 
          //set bold font etc 
          break; 
         case FontAttributes.Italic: 
          //set italic font etc 
          break; 
         default: 
          break; 
        } 
       } 
       Control.FontFamily = font; 
      } 
     }  
    } 
+0

sollte ich benutzerdefinierte Renderer für alle Plattformen erstellen? Also muss ich es nicht für Android und iOS separat einstellen? – Sonali

+1

In Ihrem Beispiel setzen Sie die Schriftfamilie auf 'ios' und' android' auf 'null'. Aber ja, wenn Sie es für ALLE Etiketten auf dieser Plattform anders machen wollten, dann wäre ein "CustomRenderer" für jede Plattform mein Ansatz. Denken Sie daran, dass Sie möglicherweise auch für "Entry" und "SearchBar" eine ähnliche Aktion ausführen müssen, wenn Sie alle Steuerelemente erhalten möchten, die Text anzeigen – user1

Verwandte Themen