2016-06-13 36 views
2

Ich bin der Fonts Tutorial von Xamarin vorgeschlagen, um eine benutzerdefinierte heruntergeladene Schriftarten über jede Platte haben. Allerdings habe ich viele Probleme und ich versuche auch, einen Weg zu finden, etwas zu tun, aber nicht herauszufinden, wie es funktioniert.Xamarin Forms Benutzerdefinierte Schriftarten CrossPlatform

Zuerst, werfen Sie einen Blick auf das Tutorial und beginnen mit dem betreffenden Teil. Using a Custom Font


iOS:

Er sagt, dass wir die font.tff in die Ordner Resources hinzufügen müssen. Dann müssen wir etwas mit der Info.plist tun, aber was? Ich bin mir nicht sicher, was ich zu tun habe.

Androïd:

Xamarin.Forms für Android belichten derzeit nicht die Möglichkeit, die Schriftart, um eine benutzerdefinierte Schriftdatei zu setzen, so benutzerdefinierte Renderer erforderlich sind.

CustomLabelRenderer.cs

public class CustomLabelRenderer : LabelRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
    { 
     base.OnElementChanged(e); 

     System.Diagnostics.Debug.WriteLine(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf"); 

     if (!string.IsNullOrEmpty(e.NewElement?.StyleId)) 
     { 
      var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf"); 
      Control.Typeface = font; 
     } 
    } 
} 

Gemäß der Dokumentation würde die OnElementChanged() jedoch genannt werden, es funktioniert nicht. Debug.WriteLine() zeigt nichts an. Warum?

WinPhone 8.1:

Wir haben die Font-Datei auf den /Assets/Fonts/ Ordner in der Anwendung Projekt hinzuzufügen und die Build Action gesetzt: Content. Einmal realisiert, kann Xamarin.Forms für Windows Phone auf eine benutzerdefinierte Schriftart verweisen, die dem Projekt hinzugefügt wurde, indem ein bestimmter Benennungsstandard befolgt wird. Die Schrift findet jedoch nicht auf der Ansicht statt, die Schrift bleibt Standard, warum?


Im Moment nach viel sucht, viele versuchen ... Nichts ..

Ich versuche DIN Condensed Bold Schrift

Meine XAML-Layout hinzuzufügen:

<ContentPage.Content> 
<AbsoluteLayout BackgroundColor="#235A5E"> 
    <!-- Menu --> 
    <AbsoluteLayout x:Name="Menu" BackgroundColor="#2F767B" 
        AbsoluteLayout.LayoutBounds="0,0,1,0.1" 
        AbsoluteLayout.LayoutFlags="All"> 
    <Label x:Name="label" Text="Connection" TextColor="White" FontSize="30" VerticalOptions="Center" HorizontalOptions="Center" 
      AbsoluteLayout.LayoutBounds="0.5, 0, 0.8, 1" 
      AbsoluteLayout.LayoutFlags="All"/> 
    <Button x:Name="ConnectionButton" BackgroundColor="Transparent" BorderColor="Transparent" 
      AbsoluteLayout.LayoutBounds="1, 0.5, 0.2, 1" 
      AbsoluteLayout.LayoutFlags="All"/> 
    </AbsoluteLayout> 
</AbsoluteLayout> 
</ContentPage.Content> 

So kann die FontFamily-Eigenschaft des Etiketts wie folgt eingestellt werden

Aber, wie im Tutorial für das WinPhone von Beispiel gesagt, muss es auf eine andere Weise getan werden, also versuche ich, die FontFamily durch den C# -Teil zu ändern.

public partial class MyPage : ContentPage 
{ 
    public string FontFamily { get; set; } 

    public MyPage() 
    { 
     InitializeComponent(); 

     label.FontFamily = Device.OnPlatform(
      iOS: "DIN Condensed Bold", 
      Android: "DIN Condensed Bold", 
      WinPhone: @"Assets\Fonts\DINCondensedBold.ttf#DIN Condensed Bold" 
     ); 
    } 
} 

Was nicht funktioniert auch!Ich habe auch etwas interessantes über den XAML-Teil gesehen. Ich möchte (damit die FontFamily eines Tages funktioniert ..) eine defintion haben, die es mir ermöglicht, nur eine Feldleiste zu editieren, um alle FontFamily von Label auf meiner Seite zu setzen.

<ContentPage.Resources> 
    <ResourceDictionary> 

    </ResourceDictionary> 
</ContentPage.Resources> 

ich sah, dass ich in der Lage sein könnte, eine Fontfamily für alle Label von MyPage.xaml, zu definieren, wie funktioniert ist das?

Ich bin auch ein Neuling über MVVM aber ich versuchte, meine public string FontFamily { get; set; } auf dem Etikett in der XAML definiert zu binden <Label Text="Hello World !" FontFamily="{Binding FontFamily}"/> aber ein weiteres Mal ohne Erfolg ..

ich totaly bin stecken ... Wer kann Hilf entweder, das Tutorial zu machen oder erkläre mir alle Dinge, die ich nach dem Tutorial erwähnt habe. Danke für Hilfe!

+1

Lesen Sie den Blogeintrag, der von diesem Handbuch verlinkt ist, er enthält eine ausführlichere Beschreibung zum Ändern der Datei info.plist – Jason

+0

Sie könnten auch versuchen, diese eine Plattform gleichzeitig anzugehen - da Sie mehrere Fragen in einen einzigen Beitrag gepackt haben, was schwer zu beantworten ist prägnant – Jason

+1

Vielen Dank für Ihre Antwort. Ok also für die anderen (Android/WinPhone) warum funktioniert das nicht? Ich möchte nur eine Frage/Antwort nützlich für Leute, die die gleichen Probleme haben – Emixam23

Antwort

14

Ich glaube, irgendwann ist der Ansatz von Xamarin Forms einfacher geworden, als einen benutzerdefinierten Renderer (oder einen Effekt usw.) zu benötigen. Zuerst gibt es die offizielle Anleitung: https://developer.xamarin.com/guides/xamarin-forms/user-interface/text/fonts/#Using_a_Custom_Font.

Die Arbeitslösung für iOS, Android und UWP, für mich endete als:

<Label Text="The sly fox jumps over the lazy brown dog."> 
     <Label.FontFamily> 
      <OnPlatform x:TypeArguments="x:String"> 
       <On Platform="iOS" Value="OpenSans-Semibold"/> 
       <On Platform="Android" Value="Fonts/OpenSans-Semibold.ttf#OpenSans-Semibold"/> 
       <On Platform="WinPhone" Value="\Assets\Fonts\OpenSans-Semibold.ttf#Open Sans"/> 
      </OnPlatform> 
     </Label.FontFamily> 
    </Label> 

für alle drei Plattformen der Schriftart-Dateien in diesem Beispiel in einem Fonts Unterordner gespeichert sind. Sie sehen, dass dies im Android- und UWP-Pfad (WinPhone) widergespiegelt wird. In iOS halten die PLIST-Einträge die Pfadinformationen zur benutzerdefinierten Schriftart.

Der schwierigste Teil war herauszufinden, Schriftart/bevorzugte Schriftart. Beachten Sie die Unterschiede nach dem "#" für Android und UWP/WinPhone. Kombination von Versuch und Irrtum (Android) und Dank dieses Artikels, um die Spezifität zu verdeutlichen: http://www.blendrocks.com/code-blend/2015/01/04/a-complete-guide-to-working-with-custom-fonts-in-your-windows-and-windows-phone-app.

Der relevanteste Teil dieses Artikels ist, wie wählerisch und nicht offensichtlich der bevorzugte Schriftartname sein kann. Der Windows-Schriften-Viewer (und auch das Mac-Font-Buch, btw, afaik) zeigt nicht den bevorzugten Familiennamen. Aus dem Artikel:

Dieser Teil "#Helvetica Neue LT Std" ist ein Suffix, der die Preferred Family enthält. Es ist erforderlich, damit die benutzerdefinierte Schriftart funktioniert. Das Suffix muss absolut korrekt sein und die Groß-/Kleinschreibung muss beachtet werden.

  • Der einfachste Weg, um es zu finden, ist ein Tool namens DP4 Font Viewer zu verwenden. Es ist kostenlos und kann downloaded here gefunden werden. Finden Sie Ihre Schriftart durch das Programm, gehen Sie zum Info tippen Sie auf die bevorzugte Familie.
  • Verwenden Sie nicht Windows in Font Viewer erstellt, da es nicht die richtige bevorzugte Schriftfamilie zeigt.

EDIT: Aktualisiert das OnPlatform Snippet derzeit empfohlene Syntax.