Xamarin.forms: [Bug] ExportFont funktioniert nicht mit UWP

Erstellt am 12. Apr. 2020  ·  55Kommentare  ·  Quelle: xamarin/Xamarin.Forms

Beschreibung

Benutzerdefinierte Schriftarten werden in UWP nicht angezeigt, wenn das neue ExportFontAttribute verwendet wird.

Schritte zum Reproduzieren

  1. Fügen Sie eine TTF- oder OTF-Datei aus Google Fonts, FontAwesome, icomoon usw. als eingebettete Ressource in Ihr freigegebenes Projekt ein
  2. Fügen Sie Ihrer Assembly das ExportFont-Attribut hinzu. zB [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. Verweisen Sie auf die Schriftfamilie im XAML-Markup
  4. Kompilieren Sie die UWP-App und führen Sie sie aus

Erwartetes Verhalten

Es sollte eine benutzerdefinierte Schriftart verwendet werden.

Tatsächliches Verhalten

Benutzerdefinierte Schriftarten werden in iOS und Android verwendet, nicht jedoch in UWP.

Grundinformation

  • Version mit Problem: 4.5.0.617
  • Plattform-Ziel-Frameworks:

    • iOS: 13.4

    • Android: 9.0

    • UWP: 18362

Reproduktionslink

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

Hilfreichster Kommentar

Ich habe das gleiche Problem. Es scheint, dass UWP bei Xamarin.Forms immer ein nachträglicher Gedanke ist und bei weitem nicht so gut unterstützt wird. Ich verstehe, dass die Nutzung wahrscheinlich weitaus geringer ist als bei Android oder iOS, aber es ist sehr frustrierend.

Alle 55 Kommentare

Eingebettete Schriftarten im Format TTF oder OTF funktionieren unter Android und iOS.

Captura de pantalla 2020-04-20 a las 16 17 49

In UWP funktioniert die Schriftart Fontawesome OTF nicht wie erwartet:
Captura de pantalla 2020-04-20 a las 16 17 59

Ich habe das gleiche Problem. Es scheint, dass UWP bei Xamarin.Forms immer ein nachträglicher Gedanke ist und bei weitem nicht so gut unterstützt wird. Ich verstehe, dass die Nutzung wahrscheinlich weitaus geringer ist als bei Android oder iOS, aber es ist sehr frustrierend.

Ich hatte dieses Problem auch bei UWP. Ich habe es jedoch zum Laufen gebracht, als ich den Alias ​​aus der ExportFont-Deklaration entfernt habe.

Folgendes habe ich getan:

  1. Ich habe meine eigene Schriftart erstellt. Die von mir verwendeten Glyphen wurden alle Kleinbuchstaben zugeordnet
  2. In meiner in App.xaml.cs projizierten Freigabe habe ich hinzugefügt: [Assembly: ExportFont ("karenfont.ttf")]
  3. Ich habe karenfont.ttf als eingebettete Ressource zum obersten Verzeichnis meines freigegebenen Projekts hinzugefügt.
  4. In meiner Xamarin Forms XAML-Datei hatte ich Folgendes:
    <Button Text="b" FontFamily="karenfont"/>

Dies funktioniert jetzt auf UWP. Es funktioniert nicht unter Android. Ich verwende Xamarin Forms v4.5.0.617

Ich habe das gleiche Problem. Es scheint, dass UWP bei Xamarin.Forms immer ein nachträglicher Gedanke ist und bei weitem nicht so gut unterstützt wird. Ich verstehe, dass die Nutzung wahrscheinlich weitaus geringer ist als bei Android oder iOS, aber es ist sehr frustrierend.

Ich denke, dass viele Xamarin-Entwickler (und Visual Studio-Entwickler, die an Sachen arbeiten, die sich auf Xamarin beziehen) nur Macs verwenden, und wenn sie Windows verwenden, ignorieren sie UWP einfach. Manchmal nehmen sie UWP in die Beispielprojekte auf, aber SELTEN werden sie in Videopräsentationen gezeigt - daher bin ich mir nicht einmal sicher, ob die vorgestellten Funktionen tatsächlich auf UWP funktionieren.

@jsuarezruiz Ich versuche jetzt ExportFont in der ersten Release-Version von Xamarin 4.6. Ich habe das Beispiel in einem Xamarin-Video befolgt und

Ich bin in der unglücklichen Lage, iOS, Android und UWP für unser Produkt unterstützen zu müssen, und die Tatsache, dass UWP so oft zurückgelassen wird, hat dazu geführt, dass wir mehrere Veröffentlichungszyklen warten mussten, um tatsächlich neue Funktionen zu nutzen.
Wir haben drei benutzerdefinierte Schriftarten, die wir laden. Aus irgendeinem Grund ist die Symbolschrift die einzige, die ich für UWP nicht laden kann. Die beiden anderen Plattformen haben keine Probleme.

@joshminor, damit mit dieser Methode 2 von 3 Schriftarten auf UWP funktionieren?
Vielleicht gibt es etwas Spezielles für einige Schriftarten, das das Problem verursacht ...

Eigentlich habe ich gerade festgestellt, dass die beiden funktionierenden Schriftarten als Systemschriftarten auf meinem Windows-Testcomputer installiert sind ... das hat möglicherweise etwas damit zu tun.
Bearbeiten
Ich habe versucht, die nicht funktionierende Schriftart zu installieren, sie hat nichts geändert. Ich habe eine ganz andere Schriftart als Google WebFonts ("Lobster") ausprobiert und sie funktioniert ohne Probleme (außer Aliase funktionieren nicht).

Ich habe die Hummer-Schriftart ausprobiert und sie funktionierte nur, wenn ich sie auf dem System installiert hatte. Das Einbetten der Schriftarten hat nicht funktioniert.

Bearbeiten: Ich nehme es zurück, es hat funktioniert (ich hatte einen Tippfehler im Namen). Es scheint also, dass einige Schriftarten funktionieren und andere nicht? sehr faszinierend

ein bisschen mehr Infos

Ich habe diese Google-Schriftart aufgegriffen, die Datei und ihre Verweise im Code von Lobster-Regular.ttf in Lobster-Regular-renamed.ttf umbenannt - dies hat dazu geführt, dass sie nicht mehr funktioniert. Setzen Sie den ursprünglichen Namen wieder auf und es funktioniert wieder.
Dies weist wahrscheinlich darauf hin, dass der Dateiname mit einer internen Eigenschaft in der Schriftart selbst übereinstimmen muss, damit sie funktioniert, und könnte erklären, warum Benutzer mit derselben Implementierung unterschiedliche Ergebnisse erzielen - dies hängt von etwas in der Schriftartendatei selbst ab.

Ich habe gerade ein Upgrade auf Xamarin Forms 4.6.0.726 durchgeführt und meine eingebettete Schriftart karenfont funktioniert immer noch unter UWP (Windows 10 1903). Es funktioniert immer noch nicht auf Android (Android 10).

Die Schriftart, die für mich nicht geladen wird, ist eine benutzerdefinierte Symbolschrift. Ich habe mit FontForge überprüft, dass die internen Namen der Schriftfamilien genau mit dem Dateinamen übereinstimmen. Sie werden immer noch nicht geladen. Ich bin sicher, hier gibt es irgendwo ein Muster. Vorerst werde ich auf die Art und Weise zurückgreifen, wie wir zuvor Schriftarten geladen haben (Ressourcen pro Plattform).

Ich habe meine benutzerdefinierte Schriftart mit der IcoMoon-App erstellt. Was von Interesse sein könnte, ist, dass das Einbetten von karenfont nicht funktioniert hat, bis ich die Glyphen Buchstaben zugeordnet und dann auf den Buchstaben in meinem xaml verwiesen habe (im Gegensatz zur Verwendung des Hex-Codes wie: &#xf57e; )

Ich habe meine Schriftartdatei neu erstellt und festgestellt, dass sie funktionieren kann, aber es scheint, dass Schriftartname und Dateiname ähnlich sein müssen, damit sie funktionieren können.

Ich habe auch festgestellt, dass selbst wenn es zu funktionieren scheint, nicht alle UI-Elemente wie erwartet funktionieren, dh Symbolleistensymbole mit Schriftbildquelle scheinen nicht zu funktionieren, ich erhalte nur ein Quadrat anstelle des richtigen Symbols.

Ich habe das gleiche Problem mit der MaterialDesignIcons-Schriftart (https://materialdesignicons.com/), funktioniert gut unter iOS und Android, aber alle Rechtecke unter UWP.

Sehen Sie dasselbe hier, wenn das Font Pack installiert ist, scheint es zu funktionieren, aber wenn es Teil des Projekts wie FontAwesome oder MaterialDesignIcons ist, die nicht auf dem Computer installiert sind, funktioniert es nicht nur mit kleinen Rechtecken.

Zurück zur alten Methode, zu jedem Projekt etwas hinzuzufügen und im ResourceDictionary zu referenzieren, funktioniert, aber das ist mehr Arbeit und nicht die neue Aktualität.

Ich bin mir nicht sicher, ob dies eine Regression ist oder nie funktioniert hat, da meine anderen Projekte UWP nicht enthalten haben.

das gleiche hier, nur Quadrate auf UWP zu sehen ...

Gibt es ein Update, wann dies behoben wird?

Gleich hier ... hoffnungsloses UWP ...

Hier gilt das gleiche. Sieht aus wie UWP ist tot.

Ok Alles, was ich für mein aktuelles Projekt reparieren muss, ist ein Blick darauf, wie ich es reparieren kann.

@samhouts @jsuarezruiz Kannst du bitte zeigen, dass daran gearbeitet wird ? Vielen Dank

OK, ich glaube, ich habe gefunden, was hier passiert, und es braucht keine PR.

Für UWP bestand die alte Vorgehensweise darin, dass Sie das FontPack mit einer OnPlatform zum ResourcesDictionary hinzugefügt haben und es ungefähr so ​​aussah:

<ResourceDictionary>
  <OnPlatform x:TypeArguments="x:String"
            x:Key="IconFont">
    <On Platform="Android"
        Value="materialdesignicons-webfont.ttf#Material Design Icons" />
    <On Platform="iOS"
        Value="Material Design Icons" />
    <On Platform="UWP"
        Value="/Assets/materialdesignicons-webfont.ttf#Material Design Icons" />
  </OnPlatform>
</ResourceDictionary>

Beachten Sie, dass für Android und UWP #Material Design Icons für die Verwendung mit eingebetteter Schriftart vorhanden ist. Dieser Teil wird von UWP weiterhin benötigt.

Ich fand dies wie in der Xamarin-Codebasis für die Kontrollgalerie. Die XAML hatte diese Zeile für die EmbeddedFonts-Seite:

<Label Text="Mono Font" FontFamily="PTM55FT#PTMono-Regular"/>

Beachten Sie die #PTMono-Regular dort am Ende des Schriftnamens!

Also habe ich die #Material Design Icons am Ende meines Schriftnamens wie folgt hinzugefügt:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Und Hey Presto, es funktioniert, ich habe es überprüft und es funktioniert unter UWP / Droid und iOS, da das alles ist, was ich für mein aktuelles Projekt brauche.

Wenn Sie wissen möchten, welcher Teil nach dem # steht, ist dies der Name der Schriftart in der Schriftartdatei. Der einfachste Weg, dies zu erreichen, besteht darin, (unter Win10 trotzdem!) Die Schriftartdatei zu öffnen und ganz oben den Namen zu finden:

image

Ich hoffe, das hilft Ihnen und ich denke, es schließt dieses Problem @samhouts @jsuarezruiz, da es außer den

Ich denke, XF sollte den ersten Schriftnamen aus der Datei erhalten, wenn er nicht vom Benutzer angegeben wird

Ja! Ich habe dies in meiner app.xaml und die Schriftarten haben für mich funktioniert:
<OnPlatform x:Key="MaterialWebFontFamily" x:TypeArguments="x:String"> <On Platform="Android" Value="materialdesignicons-webfont.ttf#Material Design Icons" /> <On Platform="UWP" Value="Assets/Fonts/materialdesignicons-webfont.ttf#Material Design Icons" /> </OnPlatform>

@ ktd12 aber benutzt du die neuen EmbeddedFonts?

@VladislavAntonyuk Vielleicht muss es dann untersucht werden. Ich habe es nicht mit einer älteren Version von XF versucht, daher bin ich mir nicht sicher, ob es jemals unter UWP funktioniert hat oder ob es sich um ein neues Problem handelt. Mein aktuelles Projekt hat es mir hervorgehoben. Gerne schauen wir uns an, ob es Ihrer Meinung nach so funktionieren sollte.

Entschuldigung - ich habe zu früh gesprochen. Die Schriftart, die ich als eingebettete Schriftart verwende, ist eine von mir erstellte Schrift namens karenfont. Ich habe das gegenteilige Problem wie alle anderen: Es funktioniert unter UWP, aber nicht unter Android. Ich verwende XF 4.6.0.726, Windows 10 1903 auf einem Surface Pro 7 und Android 10 auf einem Samsung Galaxy s10
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

Unter Windows sieht der Buchstabe "b" folgendermaßen aus:
b on windows

Unter Android sieht der Buchstabe "b" folgendermaßen aus:
b on android

Wie die Schrift aussieht:
karenfont

OK, ich glaube, ich habe gefunden, was hier passiert, und es braucht keine PR.

Für UWP bestand die alte Vorgehensweise darin, dass Sie das FontPack mit einer OnPlatform zum ResourcesDictionary hinzugefügt haben und es ungefähr so ​​aussah:

<ResourceDictionary>
  <OnPlatform x:TypeArguments="x:String"
            x:Key="IconFont">
    <On Platform="Android"
        Value="materialdesignicons-webfont.ttf#Material Design Icons" />
    <On Platform="iOS"
        Value="Material Design Icons" />
    <On Platform="UWP"
        Value="/Assets/materialdesignicons-webfont.ttf#Material Design Icons" />
  </OnPlatform>
</ResourceDictionary>

Beachten Sie, dass für Android und UWP #Material Design Icons für die Verwendung mit eingebetteter Schriftart vorhanden ist. Dieser Teil wird von UWP weiterhin benötigt.

Ich fand dies wie in der Xamarin-Codebasis für die Kontrollgalerie. Die XAML hatte diese Zeile für die EmbeddedFonts-Seite:

<Label Text="Mono Font" FontFamily="PTM55FT#PTMono-Regular"/>

Beachten Sie die #PTMono-Regular dort am Ende des Schriftnamens!

Also habe ich die #Material Design Icons am Ende meines Schriftnamens wie folgt hinzugefügt:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Und Hey Presto, es funktioniert, ich habe es überprüft und es funktioniert unter UWP / Droid und iOS, da das alles ist, was ich für mein aktuelles Projekt brauche.

Wenn Sie wissen möchten, welcher Teil nach dem # steht, ist dies der Name der Schriftart in der Schriftartdatei. Der einfachste Weg, dies zu erreichen, besteht darin, (unter Win10 trotzdem!) Die Schriftartdatei zu öffnen und ganz oben den Namen zu finden:

image

Ich hoffe, das hilft Ihnen und ich denke, es schließt dieses Problem @samhouts @jsuarezruiz, da es außer den

Hallo,
Lässt du das am Beispielprojekt arbeiten? https://github.com/jfversluis/EmbeddedFontsSample
Ich habe es versucht, aber ohne Erfolg.

Das Hinzufügen des #Fontnamens schien nichts für mich zu tun. Zuerst dachte ich, es würde funktionieren, aber nachdem ich die Schriftart vom System deinstalliert hatte, wurden wieder Quadrate angezeigt. Ich habe mit einem anderen Mitarbeiter bestätigt, dass die Schrift bei der Installation korrekt angezeigt wird.

Ich habe ein bisschen mehr gegraben und das hat etwas mit der Schriftartdatei zu tun. Ich kann zu verschiedenen Schriftarten wechseln und die Dinge werden gut funktionieren. Ich werde versuchen, unsere Schriftart erneut zu exportieren und zu prüfen, ob ich etwas zum Laufen bringen kann.

Ja, stimme zu, es funktioniert nicht mit UWP. Fügen Sie auch nicht den von @CliffAgius vorgeschlagenen @samhouts @jsuarezruiz bitte angesprochen werden.

Das Beispielprojekt, das im Xamarin-Release-Blog selbst enthalten ist, funktioniert nicht für UWP ( https://github.com/jfversluis/EmbeddedFontsSample)
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

Es scheint, als würden sie die Unterstützung für Windows 10 absichtlich verwerfen, wenn sie heutzutage eine neue Funktion in Xamarin.Forms veröffentlichen! :(

@UdaraAlwis ja, danke für das Posten, da ich dies völlig vergessen hatte. Mein Fix funktionierte, als ich das FotPack für etwas anderes auf die Entwicklungsmaschine geladen hatte, also dachte ich, es würde funktionieren. Sobald ich zu einem Kunden für eine Vorschau drängte, brach es. Ich musste auf die alte, langwierige Art des Hinzufügens von Schriftarten für dieses Projekt zurückgreifen, da es für einige Benutzer auf UWP abzielt.

Ich bin nicht der Meinung, dass das Team UWP in Builds ignoriert. Es ist nur so, dass die UI-Tests nicht geschrieben wurden, um dies zu erfassen, und viele Entwickler Macs verwenden, sodass sie das UWP nicht testen können. Es muss einen besseren Weg geben, dies zu tun, vielleicht ein # HotRestart-Stil für Windows, wenn Sie auf einem Mac bauen.

Ich füge nur meine Stimme hinzu.
ExportFont funktioniert nur unter UWP, wenn die Schriftart bereits auf dem Windows-Computer installiert ist. Es funktioniert also nicht auf dem Client-Computer, wenn die App installiert wird.

Im Moment musste ich die Schriftarten in einen Ordner legen und die Aktion als Inhalt festlegen und mit der Notation # darauf verweisen

/fonts/xyx.ttf#xyz.ttf

Ich habe es geschafft, dass Schriftarten im Debug-Modus korrekt angezeigt werden oder wenn "Kompilieren mit nativer .net-Toolkette" deaktiviert ist.
Wenn Sie die native .net-Kompilierung wieder aktivieren, werden alle Schriftarten sofort beschädigt.

Ich bin neu in Xamarin, daher könnte diese Lösung irreführend sein. Ich habe den von @CliffAgius erklärten

Für mich muss ich keine Schriftart installieren . Die einzige Möglichkeit für mich auf allen 3 Plattformen besteht darin, ".otf" -Dateien anstelle von ".ttf" -Dateien zu verwenden.

".ttf" -Dateien funktionieren nur für die Textschriftfamilie, aber nicht für Glyph.
Dazu muss ich ".otf" zu einem entsprechenden plattformspezifischen Ordner hinzufügen.

Es folgt meine Nutzungs- und Ressourcendatei.

Der folgende Code wurde nicht für IOS getestet.

Ressourcen-Datei:

<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    xmlns:d="http://xamarin.com/schemas/2014/forms/design"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:local="clr-namespace:ProjectName.Themes.FontIcon;assembly=ProjectName.Themes"
                    mc:Ignorable="d"
                    x:Class="ProjectName.Themes.Styles.IconImage">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ColorsResource.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <OnAppTheme x:Key="ImageLogoSample"
                x:TypeArguments="FileImageSource"
                Light="{x:Static local:AwesomeFontSolid.TicketAlt}"
                Dark="{x:Static local:AwesomeFontSolid.PersonBooth}" />  
    <!-- Sizes -->
    <x:Double x:Key="SizeTabIcon">24</x:Double>

    <!-- Fonts Icon -->

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeBrand">
        <On Platform="Android"
            Value="FABrand.otf#Font Awesome 5 Brands" />
        <On Platform="iOS"
            Value="FABrand-Regular" />
        <On Platform="UWP"
            Value="/Assets/FABrand.otf#Font Awesome 5 Brands" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeRegular">
        <On Platform="Android"
            Value="FARegular.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="FontAwesome5Free-Regular" />
        <On Platform="UWP"
            Value="/Assets/FARegular.otf#Font Awesome 5 Pro" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeSolid">
        <On Platform="Android"
            Value="FASolid.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="FontAwesome5Free-Solid" />
        <On Platform="UWP"
            Value="/Assets/FASolid.otf#Font Awesome 5 Pro" />
    </OnPlatform>



    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeLight">
        <On Platform="Android"
            Value="FALight.otf#Font Awesome 5 Pro" />
        <On Platform="iOS"
            Value="Font Awesome 5 Pro" />
        <On Platform="UWP"
            Value="/Assets/FALight.otf#Font Awesome 5 Pro" />
    </OnPlatform>

    <OnPlatform x:TypeArguments="x:String"
                x:Key="FontAwesomeSolidDuoTone">
        <On Platform="Android"
            Value="FASolidDuotone.otf#Font Awesome 5 Duotone" />
        <On Platform="iOS"
            Value="Font Awesome 5 Duotone" />
        <On Platform="UWP"
            Value="/Assets/FASolidDuotone.otf#Font Awesome 5 Duotone" />
    </OnPlatform>


    <OnPlatform x:TypeArguments="x:String"
                x:Key="MaterialDesign">
        <On Platform="Android"
            Value="MD.otf#Material Design Icons" />
        <On Platform="iOS"
            Value="Material Design Icons" />
        <On Platform="UWP"
            Value="/Assets/MD.otf#Material Design Icons" />
    </OnPlatform>

    <!--ICONS 30 by 30-->  
    <!--Black-->
    <FontImageSource x:Key="IconPowerOff"
                     FontFamily="{DynamicResource FontAwesomeSolid}"
                     Glyph="{x:Static local:AwesomeFontSolid.PowerOff}"
                     Size="30"
                     Color="Black" />
    <!--ICONS 100 by 100-->
    <FontImageSource x:Key="IconHand"
                     FontFamily="{DynamicResource FontAwesomeSolid}"
                     Glyph="{x:Static local:AwesomeFontSolid.Hands}"
                     Size="100"
                     Color="Black" />   
</ResourceDictionary>

Und in Xamal Usage

  <Image Margin="20,0" WidthRequest="30">
                        <Image.Source>
                            <FontImageSource
                                FontFamily="{StaticResource FontAwesomeSolid}"
                                Glyph="{x:Static local:AwesomeFontSolid.Users}"
                                Color="{DynamicResource SurfaceTextColor}" />
                        </Image.Source>
                    </Image>

Samit, ich habe eine .ttf-Schriftart, die mit Embedded / ExportFont unter Android / iOS funktioniert.

Die Fehlerbehebung ist jedoch ein Erfolg oder Misserfolg - keine Nachrichten oder Metriken, die Ihnen helfen, zu verstehen, warum dies nicht funktioniert. Dies gefällt mir mit der Xamarin-Codebasis nicht. In vielen Fällen, in denen Sie einen falschen Parameter übergeben, führt die Funktion nur nichts aus, anstatt Sie darüber zu informieren, dass ein Parameterwert falsch ist. Fehlermeldungen / Protokollierung / Ausnahmen können sehr hilfreich sein.

Samit, ich habe eine .ttf-Schriftart, die mit Embedded / ExportFont unter Android / iOS funktioniert.

Die Fehlerbehebung ist jedoch ein Erfolg oder Misserfolg - keine Nachrichten oder Metriken, die Ihnen helfen, zu verstehen, warum dies nicht funktioniert. Dies gefällt mir mit der Xamarin-Codebasis nicht. In vielen Fällen, in denen Sie einen falschen Parameter übergeben, führt die Funktion nur nichts aus, anstatt Sie darüber zu informieren, dass ein Parameterwert falsch ist. Fehlermeldungen / Protokollierung / Ausnahmen können sehr hilfreich sein.

Hallo Chris,

Ja, ich habe das gleiche Verhalten beobachtet und es war schwierig zu verstehen oder zu debuggen, was falsch ist. Die ".ttf" -Datei funktioniert für Android und IOS, aber nicht für UWP (Glyph).
Also habe ich versucht, die .otf-Datei zu verwenden und sie funktioniert für alle drei Plattformen für Image (Glyph).

Seltsam ist auch, dass ".ttf" auf allen drei Plattformen für Textschriftarten funktioniert (nicht sicher, wie es zu erklären ist, aber die Roboto-Italic.ttf-Datei funktioniert auf allen drei Plattformen), aber wie ich bereits sagte, ist Glyph aus der .ttf-Datei nicht Arbeiten.

Ich hoffe, wir haben bald eine Lösung dafür.

@ Samit.
Ich glaube, Ihr Code bezieht sich auf die "Legacy" -Methode zur Unterstützung benutzerdefinierter Schriftarten in Xamarin. In diesem Szenario installieren Sie Ihre Schriftartdatei in jedem Projektordner, fügen Manifestcode hinzu und beziehen sich dann auf den Schriftartnamen, wie Sie ihn in Ihrem Beispiel für eine Ressourcendatei angeben, wobei jede Plattform eine geringfügig andere Variation des Dateinamens erhält.
Das Problem, das hier mit der kürzlich mit Xamarin eingeführten Funktion "ExportFont" gemeldet wurde und es Ihnen ermöglicht, die Schriftart einmal in das freigegebene Projekt aufzunehmen und sie dann mit einer ExportFont-Direktive der App bekannt zu machen.
[Assembly: ExportFont ("Samantha.ttf", Alias ​​= "MyAwesomeCustomFont")]

https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

Der Fehler meldete, dass dies für Android- und iOS-Projekte funktioniert, jedoch nicht für UWP, bei denen wir zur vorherigen Methode zurückkehren müssen.

Hier steht das gleiche Problem. Wir haben die Schriftart-Einbettung verwendet, die unter Android und iOS wie ein Kinderspiel funktioniert. Aufgrund einiger Kundenanforderungen haben wir ein zusätzliches UWP-Projekt hinzugefügt. Es funktioniert überhaupt nicht und wir sehen nur einige Kisten.

Samit, ich habe eine .ttf-Schriftart, die mit Embedded / ExportFont unter Android / iOS funktioniert.
Die Fehlerbehebung ist jedoch ein Erfolg oder Misserfolg - keine Nachrichten oder Metriken, die Ihnen helfen, zu verstehen, warum dies nicht funktioniert. Dies gefällt mir mit der Xamarin-Codebasis nicht. In vielen Fällen, in denen Sie einen falschen Parameter übergeben, führt die Funktion nur nichts aus, anstatt Sie darüber zu informieren, dass ein Parameterwert falsch ist. Fehlermeldungen / Protokollierung / Ausnahmen können sehr hilfreich sein.

Hallo Chris,

Ja, ich habe das gleiche Verhalten beobachtet und es war schwierig zu verstehen oder zu debuggen, was falsch ist. Die ".ttf" -Datei funktioniert für Android und IOS, aber nicht für UWP (Glyph).
Also habe ich versucht, die .otf-Datei zu verwenden und sie funktioniert für alle drei Plattformen für Image (Glyph).

Seltsam ist auch, dass ".ttf" auf allen drei Plattformen für Textschriftarten funktioniert (nicht sicher, wie es zu erklären ist, aber die Roboto-Italic.ttf-Datei funktioniert auf allen drei Plattformen), aber wie ich bereits sagte, ist Glyph aus der .ttf-Datei nicht Arbeiten.

Ich hoffe, wir haben bald eine Lösung dafür.

Möglicherweise möchten Sie überprüfen, ob die "Roboto-Italic.ttf" auf allen drei Plattformen funktioniert, weil sie physisch auf dem Windows-Computer installiert ist, den Sie zum Testen verwenden.
Es hat lange gedauert, bis ich herausgefunden hatte, warum einige Schriftarten mit ExportFont unter UWP funktionierten und andere nicht, bis mir klar wurde, dass nur Schriftarten verwendet wurden, die bereits in Windows installiert waren.

Das Problem ist, dass UWP den Schriftnamen als Teil des Schriftfamiliennamens haben möchte. Xamarin Forms geht fälschlicherweise davon aus, dass der Name der Schriftart mit dem Namen der Schriftartdatei übereinstimmt. Für viele Schriftarten, die nicht funktionieren (zum Beispiel FontAwesome)

Ich werde eine PR erstellen, um dieses Problem zu beheben.

Xamarin.Forms: 4.8.0.1269
ExportFont funktioniert für Android, jedoch nicht für UWP

Anstatt ExportFont im freigegebenen Projekt zu verwenden, finden Sie hier eine Problemumgehung:

  1. Kopieren Sie Ihre Schriftartdatei (xxx.ttf) in den Ordner Assets im Androind- und UWP-Projekt:

[Android]:
Assets / xxx.ttf
Aktion erstellen: AndroidAsset
In Ausgabeverzeichnis kopieren: Nicht kopieren

[UWP]:
Assets / xxx.ttf
Aktion erstellen: Inhalt
In Ausgabeverzeichnis kopieren: Nicht kopieren

  1. Legt die FontFamily-Eigenschaft für Ihren Text fest:

       <Label.FontFamily>
            <OnPlatform x:TypeArguments="x:String">
                <On Platform="Android"
                    Value="xxx.ttf#Font Name" />
                <On Platform="UWP"
                    Value="/Assets/xxx.ttf#Font Name" />
            </OnPlatform>
        </Label.FontFamily>
    

Jetzt funktioniert es wie erwartet!

@ johncao158 Dies ist die bisherige Methode zur Verwendung benutzerdefinierter Schriftarten in Xamarin Forms, die von Anfang an funktioniert hat. In diesem Problem geht es speziell um [ExportFont] , das unter UWP nicht funktioniert. Mit der von Ihnen vorgeschlagenen Problemumgehung können Sie die Schriftarten immer noch nicht als eingebettete Ressource hinzufügen.

Mein Projekt funktioniert folgendermaßen:

[GEMEINSAMES PROJEKT]
AssemblyInfo.cs
[Assembly: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "für iOS und Android"

Aktion erstellen: Inhalt
In Ausgabeverzeichnis kopieren: Nicht kopieren

Mein Projekt funktioniert folgendermaßen:

[GEMEINSAMES PROJEKT]
AssemblyInfo.cs
[Assembly: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "für iOS und Android"

Aktion erstellen: Inhalt
In Ausgabeverzeichnis kopieren: Nicht kopieren

Du hast Recht. Diese neue Funktion funktioniert unter iOS und Android.
Das Problem ist, dass es unter Windows nur funktioniert, wenn die Schriftart bereits auf dem Computer installiert ist.

Warum war das geschlossen? Obwohl benutzerdefinierte Schriftarten im UWP-Debug funktionieren, funktionieren sie in einer Release-Version nicht.

Wenn ich sie in einer Seitenversion der Release-Version verwende, ist die Seite, auf der sich die benutzerdefinierte Schriftart befindet, vollständig leer. Wenn ich die Schriftfamilie in xaml auskommentiere, erscheint die Seite in Ordnung ... aber natürlich ohne benutzerdefinierte Schriftarten.

Ich habe auch den Windows / Font-Ordner überprüft und die Font befand sich auf dem Laptop, auf dem ich die App installiert habe.

Ich habe das gleiche Problem wie @ BillyMartin1964 in der UWP-Version, auch mit dem neuesten XF 4.8.0.1534 + 384-sha.712849b9d-azdo.4114742

Wir haben auch das gleiche Problem wie @ BillyMartin1964 - es war sehr verwirrend, da die Schriftarten unter Android / iOS und sogar UWP im Debug-Modus

@samhouts Gibt es eine

Können wir zumindest Code haben, der die benutzerdefinierte Schriftart ignoriert, wenn sie nicht auf dem Computer / der XBox des Benutzers installiert ist?

Können wir zumindest Code haben, der die benutzerdefinierte Schriftart ignoriert, wenn sie nicht auf dem Computer / der XBox des Benutzers installiert ist?

Ich denke, Sie können der Seite zwei Elemente hinzufügen und sie je nach Plattform, auf der sie ausgeführt werden, sichtbar machen. Verwenden Sie dazu OnPlatform .

@ArtjomP , das ist nicht das Problem. Die gesamte Seite ist leer, wenn wir die eingebettete Schriftart beim Seitenladen eines Release-Builds auf einen anderen PC verwenden. Jemand sagte, es liege daran, dass auf dem anderen PC die Schriftart zuvor nicht installiert war. Ich bin mir nicht sicher, aber wenn dies der Fall ist, müssen wir die installierte Schriftart testen und sie nicht verwenden, wenn sie nicht installiert ist.

Persönlich denke ich, dass es ein weiteres Problem ist, da es den Anschein hat, dass sich die Schriftart im Schriftartenordner auf dem Computer des Benutzers befand.

@ BillyMartin1964 ziemlich seltsam meine Seiten funktionieren alle gut auf UWP Release. Die Beschriftungen mit benutzerdefinierter Schrift zeigen nur ein Quadrat wie auf dem Bild oben von @jsuarezruiz

@ArtjomP , installieren Sie auf einem anderen Computer?

@ BillyMartin1964 sicher, dass ich Apps auf meinem Computer entwickle, CI mit UI-Tests auf einem anderen und Benutzer meine Apps aus dem Store auf ihren PCs und Xboxes verwenden

@ArtjomP , kann Ihnen nichts über den Store erzählen, da ich Angst habe, ihn in einer Produktions-App zu verwenden. Ich kann Ihnen sagen, dass der einzige Unterschied zwischen der leeren und nicht weißen Seite darin besteht, das FontFamily-Attribut zu entfernen. Der Platz scheint eine Ikone auf seinem zu sein.

@ BillyMartin1964 Sie könnten versuchen, obj & bin-Ordner zu entfernen und Ihr Projekt mit dem enthaltenen FontFamily-Attribut neu zu erstellen. Es hilft manchmal, mysteriöse Fehler loszuwerden.

Warum war das geschlossen? Obwohl benutzerdefinierte Schriftarten im UWP-Debug funktionieren, funktionieren sie in einer Release-Version nicht.

Wenn ich sie in einer Seitenversion der Release-Version verwende, ist die Seite, auf der sich die benutzerdefinierte Schriftart befindet, vollständig leer. Wenn ich die Schriftfamilie in xaml auskommentiere, erscheint die Seite in Ordnung ... aber natürlich ohne benutzerdefinierte Schriftarten.

Ich habe auch den Windows / Font-Ordner überprüft und die Font befand sich auf dem Laptop, auf dem ich die App installiert habe.

Hierfür gibt es ein neues Problem: # 12404

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen