Xamarin.forms: [Bug] ExportFont ne fonctionne pas sur UWP

Créé le 12 avr. 2020  ·  55Commentaires  ·  Source: xamarin/Xamarin.Forms

La description

Les polices personnalisées n'apparaissent pas dans UWP lorsque le nouveau ExportFontAttribute est utilisé.

Étapes à suivre pour reproduire

  1. Ajoutez un fichier TTF ou OTF de Google Fonts, FontAwesome, icomoon, etc. en tant que ressource intégrée dans votre projet partagé
  2. Ajoutez l'attribut ExportFont à votre assembly. par exemple [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. Faire référence à la famille de polices dans le balisage XAML
  4. Compilez et exécutez l'application UWP

Comportement prévisible

Une police personnalisée doit être utilisée.

Comportement réel

La police personnalisée est utilisée dans iOS et Android, mais pas dans UWP.

Informations de base

  • Version avec problème: 4.5.0.617
  • Cadres cibles de plate-forme:

    • iOS: 13,4

    • Android: 9.0

    • UWP: 18362

Lien de reproduction

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

Commentaire le plus utile

Je rencontre le même problème. Il semble que UWP est toujours une réflexion après coup avec Xamarin.Forms et n'est pas pris en charge aussi bien. Je comprends que son utilisation est probablement bien moindre qu'Android ou iOS, mais c'est très frustrant.

Tous les 55 commentaires

Les polices intégrées au format TTF ou OTF fonctionnent sous Android et iOS.

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

Dans UWP, la police Fontawesome OTF ne fonctionne pas comme prévu:
Captura de pantalla 2020-04-20 a las 16 17 59

Je rencontre le même problème. Il semble que UWP est toujours une réflexion après coup avec Xamarin.Forms et n'est pas pris en charge aussi bien. Je comprends que son utilisation est probablement bien moindre qu'Android ou iOS, mais c'est très frustrant.

J'ai également eu ce problème sur UWP. Cependant, je l'ai fait fonctionner lorsque j'ai supprimé l'alias de la déclaration ExportFont.

Voici ce que j'ai fait:

  1. J'ai créé ma propre police. Les glyphes que j'ai utilisés étaient tous mappés en caractères minuscules
  2. Dans mon projet partagé dans App.xaml.cs, j'ai ajouté: [assembly: ExportFont ("karenfont.ttf")]
  3. J'ai ajouté karenfont.ttf en tant que ressource intégrée au répertoire de niveau supérieur de mon projet partagé.
  4. Dans mon fichier xaml de formulaires xamarin, j'avais ceci:
    <Button Text="b" FontFamily="karenfont"/>

Cela fonctionne maintenant sur UWP. Cela ne fonctionne pas sur Android. J'utilise Xamarin Forms v4.5.0.617

Je rencontre le même problème. Il semble que UWP est toujours une réflexion après coup avec Xamarin.Forms et n'est pas pris en charge aussi bien. Je comprends que son utilisation est probablement bien moindre qu'Android ou iOS, mais c'est très frustrant.

Je pense que beaucoup de développeurs Xamarin (et de développeurs de studio visuel qui travaillent sur des éléments liés à Xamarin) utilisent uniquement des macs, et lorsqu'ils utilisent Windows, ils ignorent purement UWP. Parfois, ils incluent UWP dans les exemples de projets, mais ils sont RAREMENT montrés sur des présentations vidéo - donc je ne suis même pas sûr que les fonctionnalités en démonstration fonctionnent réellement sur UWP.

@jsuarezruiz J'essaie maintenant ExportFont sur la première version de Xamarin 4.6, j'ai suivi l'exemple montré sur une vidéo Xamarin et devinez quoi, cela ne fonctionne pas sur UWP, je reçois juste des carrés. Fonctionne très bien sur Android. Comme dans l'exemple de l'application FlyMe, je n'utilise pas d'alias. le fichier de police se trouve au niveau supérieur du projet partagé. ne fonctionne pas.

Je suis dans la malchance de devoir prendre en charge iOS, Android et UWP pour notre produit et le fait qu'UWP soit si souvent laissé pour compte nous a obligé à attendre plusieurs cycles de publication pour utiliser réellement les nouvelles fonctionnalités.
Nous avons trois polices personnalisées que nous chargeons. Pour une raison quelconque, la police d'icônes est la seule que je ne peux pas charger pour UWP. Les deux autres plates-formes n'ont aucun problème.

@joshminor pour que vous obteniez 2 polices sur 3 fonctionnant sur UWP avec cette méthode?
Il y a peut-être quelque chose de spécifique à certaines polices qui cause le problème ...

En fait, je viens de réaliser que les deux polices qui fonctionnent sont installées en tant que polices système sur ma machine de test Windows ... donc cela peut avoir quelque chose à voir avec cela.
Éditer
J'ai essayé d'installer la police qui ne fonctionnait pas, cela n'a rien changé. J'ai essayé une police entièrement différente de Google WebFonts ("Lobster") et cela fonctionne sans aucun problème (sauf que les alias ne fonctionnent pas)

J'ai essayé la police de homard et la seule façon dont cela fonctionnait était de l'avoir installée sur le système. l'incorporation de polices n'a pas fonctionné.

Edit: je le reprends, cela a fonctionné (j'avais une faute de frappe dans le nom). alors, il semble que certaines polices fonctionnent et d'autres non? très intrigant

un peu plus d'infos

J'ai attrapé cette police google, renommé le fichier et ses références dans le code de Lobster-Regular.ttf en Lobster-Regular-renamed.ttf - cela l'a empêché de fonctionner. Remettez le nom d'origine et cela fonctionnera à nouveau.
cela indique probablement que le nom de fichier doit correspondre à une propriété interne de la police elle-même pour que cela fonctionne, et pourrait expliquer pourquoi les gens ont des résultats différents avec la même implémentation - cela dépend de quelque chose dans le fichier de police lui-même.

Je viens de passer à Xamarin Forms 4.6.0.726 et ma police intégrée, karenfont, fonctionne toujours sur UWP (Windows 10 1903). Il ne fonctionne toujours pas sur Android (Android 10).

La police qui ne se charge pas pour moi est une police d'icônes personnalisée, j'ai vérifié avec FontForge que les noms de famille de polices internes sont exactement les mêmes que le nom de fichier, mais ne se chargent toujours pas. Je suis sûr qu'il y a un modèle ici quelque part. Pour le moment, je vais revenir sur la façon dont nous avons chargé les polices auparavant (ressources par plate-forme)

J'ai créé ma police personnalisée à l'aide de l'application IcoMoon. Ce qui peut être intéressant, c'est que l'incorporation de karenfont n'a pas fonctionné jusqu'à ce que j'ai mappé les glyphes sur des lettres, puis référencé la lettre dans mon xaml (par opposition à l'utilisation du code hexadécimal comme: &#xf57e; )

J'ai recréé mon fichier de police et j'ai vu qu'il peut fonctionner, mais il semble que le nom de la police et le nom du fichier doivent être similaires pour qu'il ait une chance de fonctionner.

J'ai également constaté que même lorsque cela semble fonctionner, tous les éléments de l'interface utilisateur ne fonctionnent pas comme prévu, c'est-à-dire que les icônes de la barre d'outils avec la source de l'image de la police ne semblent pas fonctionner, j'obtiens juste un carré au lieu de l'icône appropriée.

J'ai le même problème en utilisant la police MaterialDesignIcons (https://materialdesignicons.com/), fonctionne bien sur iOS et Android, mais tous les rectangles sur UWP.

Voir la même chose ici si le pack de polices est installé, il semble fonctionner mais s'il fait partie du projet comme FontAwesome ou MaterialDesignIcons qui ne sont pas installés sur la machine, cela ne fonctionnera pas que de petits rectangles.

Revenir à l'ancienne méthode d'ajout à chaque projet et de référencement dans le ResourceDictionary fonctionne, mais c'est plus de travail et non la nouvelle tendance.

Je ne sais pas s'il s'agit d'une régression ou si cela n'a jamais fonctionné car mes autres projets n'ont pas inclus UWP.

même ici, ne voyant que des carrés sur UWP ...

Une mise à jour sur le moment où cela sera résolu?

Même chose ici ... UWP sans espoir ...

Pareil ici. On dirait que UWP est mort.

Ok Tout ce dont j'ai besoin est corrigé pour mon projet actuel donc je vais jeter un oeil à le réparer.

@samhouts @jsuarezruiz pouvez-vous s'il vous plaît montrer que cela est en cours de travail. Merci

OK, je pense que j'ai trouvé ce qui se passe ici et il n'a pas besoin d'un PR.

Pour UWP, l'ancienne façon de procéder était que vous ajoutiez le FontPack avec une OnPlatform au ResourcesDictionary et cela ressemblait à ceci:

<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>

Notez que pour Android et UWP, il existe le #Material Design Icons pour qu'il fonctionne avec la police intégrée, cette partie est toujours nécessaire à UWP.

J'ai trouvé ceci car dans la base de code Xamarin pour la Control Gallery, le XAML avait cette ligne pour la page EmbeddedFonts:

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

Notez le #PTMono-Regular à la fin du nom de la police!

J'ai donc ajouté le #Material Design Icons à la fin de mon nom de police comme ceci:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Et Hey Presto cela fonctionne, j'ai vérifié et cela fonctionne sur UWP / Droid et iOS car c'est tout ce dont j'ai besoin pour mon projet actuel.

Si vous voulez connaître la partie qui suit le #, c'est le nom de la police dans le fichier de polices et le moyen le plus simple de l'obtenir est d'ouvrir le fichier de police (sur Win10 de toute façon!) Et juste là en haut se trouve le nom:

image

J'espère que cela vous aidera et je suppose que cela résout ce problème @jsuarezruiz car il n'y a rien à corriger à part les documents.

Je pense que XF devrait obtenir le premier nom de police du fichier s'il n'est pas spécifié par l'utilisateur

Oui! J'ai ceci dans mon app.xaml et les polices fonctionnent pour moi:
<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 mais utilisez-vous les nouveaux EmbeddedFonts?

@VladislavAntonyuk Peut-être

Désolé - j'ai parlé trop tôt. La police que j'utilise comme police intégrée est celle que j'ai créée appelée karenfont. J'ai le problème inverse comme tout le monde: cela fonctionne sur UWP mais pas sur Android. J'utilise XF 4.6.0.726, Windows 10 1903 sur une Surface Pro 7 et Android 10 sur un Samsung Galaxy s10
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

Sous Windows, la lettre «b» ressemble à:
b on windows

Sur Android, la lettre «b» ressemble à:
b on android

À quoi ressemble la police:
karenfont

OK, je pense que j'ai trouvé ce qui se passe ici et il n'a pas besoin d'un PR.

Pour UWP, l'ancienne façon de procéder était que vous ajoutiez le FontPack avec une OnPlatform au ResourcesDictionary et cela ressemblait à ceci:

<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>

Notez que pour Android et UWP, il existe le #Material Design Icons pour qu'il fonctionne avec la police intégrée, cette partie est toujours nécessaire à UWP.

J'ai trouvé ceci car dans la base de code Xamarin pour la Control Gallery, le XAML avait cette ligne pour la page EmbeddedFonts:

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

Notez le #PTMono-Regular à la fin du nom de la police!

J'ai donc ajouté le #Material Design Icons à la fin de mon nom de police comme ceci:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Et Hey Presto cela fonctionne, j'ai vérifié et cela fonctionne sur UWP / Droid et iOS car c'est tout ce dont j'ai besoin pour mon projet actuel.

Si vous voulez connaître la partie qui suit le #, c'est le nom de la police dans le fichier de polices et le moyen le plus simple de l'obtenir est d'ouvrir le fichier de police (sur Win10 de toute façon!) Et juste là en haut se trouve le nom:

image

J'espère que cela vous aidera et je suppose que cela résout ce problème @jsuarezruiz car il n'y a rien à corriger à part les documents.

Salut,
obtenez-vous cela fonctionne sur l'exemple de projet? https://github.com/jfversluis/EmbeddedFontsSample
J'ai essayé, mais sans succès.

L'ajout du #fontname ne semblait rien faire pour moi. Je pensais que cela fonctionnait au début, mais après avoir désinstallé la police du système, elle est revenue à l'affichage des carrés. J'ai confirmé avec un autre collègue que si vous installez la police, elle commencera à s'afficher correctement.

J'ai creusé un peu plus et cela a _quelque chose_ à voir avec le fichier de police. Je peux passer à différentes polices et tout fonctionnera bien. Je vais essayer de réexporter notre police et voir si je peux faire fonctionner quelque chose.

Oui d'accord, cela ne fonctionne pas sur UWP. Ni l'ajout du #FontName comme suggéré par @CliffAgius , sauf si vous installez le fichier de polices manuellement dans le système d'exploitation, Windows 10. Par conséquent non, ce n'est pas un correctif. :) et il doit être adressé par l'équipe @samhouts @jsuarezruiz s'il vous plaît.

L'exemple de projet qui figure dans le blog de version Xamarin lui-même ne fonctionne pas pour UWP, https://github.com/jfversluis/EmbeddedFontsSample
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

Il semble qu'ils abandonnent intentionnellement la prise en charge de Windows 10, chaque fois qu'ils lancent une nouvelle fonctionnalité dans Xamarin.Forms ces jours-ci! :(

@UdaraAlwis oui merci d'avoir posté car j'avais totalement oublié cela, mon correctif a fonctionné car j'avais le FotPack chargé sur la machine de développement pour autre chose, alors j'ai pensé que cela fonctionnait. Dès que j'ai poussé vers un client pour un aperçu, il s'est cassé. J'ai dû revenir à l'ancienne méthode longue et longue d'ajout de polices pour ce projet, car elle cible UWP pour certains utilisateurs.

Je ne suis pas d'accord pour dire que l'équipe ne tient pas compte de l'UWP dans les versions, c'est juste que les tests d'interface utilisateur ne sont pas écrits pour le ramasser et que de nombreux développeurs utilisent des Mac et ne peuvent donc pas tester l'UWP. Il doit y avoir une meilleure façon de le faire, peut-être un style #HotRestart pour Windows lors de la construction sur un Mac.

Je viens d'ajouter mon vote.
ExportFont ne fonctionne sur UWP que si la police est déjà installée sur la machine Windows. Cela ne fonctionnera donc pas sur la machine cliente lorsque l'application sera installée.

Pour l'instant, je devais placer les polices dans un dossier et définir l'action comme contenu et y faire référence avec la notation #

/fonts/xyx.ttf#xyz.ttf

J'ai réussi à faire afficher correctement les polices en mode débogage ou lorsque "compiler avec la chaîne d'outils native .net" est désactivé.
La réactivation de la compilation native .net cassera immédiatement toutes les polices.

Je suis nouveau sur Xamarin, donc cette solution peut être trompeuse. J'ai utilisé l'approche expliquée par @CliffAgius Encore

Pour moi, je n'ai pas besoin d'installer de police . La seule façon que cela fonctionne pour moi dans toute la plate - forme est 3 à l'aide des fichiers « .otf » plutôt que des fichiers « .ttf ».

Les fichiers ".ttf" ne fonctionnent que pour la famille de polices texte mais ne fonctionnent pas pour Glyph.
Parallèlement à cela, je dois ajouter ".otf" dans un dossier spécifique à la plate-forme.

Voici mon fichier d'utilisation et de ressources.

Ci-dessous le code non testé pour IOS.

Fichier de ressources:

<?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>

Et dans l'utilisation de Xamal

  <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, j'ai une police .ttf fonctionnant avec Embedded / ExportFont sur Android / iOS.

Le dépannage est un jeu d'enfant - aucun message ou métrique pour vous aider à comprendre pourquoi cela ne fonctionne pas. C'est quelque chose que je n'aime pas avec la base de code Xamarin, dans de nombreux cas où vous passez un paramètre incorrect, la fonction ne fait rien au lieu de vous informer qu'une valeur de paramètre est incorrecte. Les messages d'erreur / journalisation / exceptions peuvent être vraiment utiles.

Samit, j'ai une police .ttf fonctionnant avec Embedded / ExportFont sur Android / iOS.

Le dépannage est un jeu d'enfant - aucun message ou métrique pour vous aider à comprendre pourquoi cela ne fonctionne pas. C'est quelque chose que je n'aime pas avec la base de code Xamarin, dans de nombreux cas où vous passez un paramètre incorrect, la fonction ne fait rien au lieu de vous informer qu'une valeur de paramètre est incorrecte. Les messages d'erreur / journalisation / exceptions peuvent être vraiment utiles.

Salut Chris,

Oui, j'ai observé le même comportement et il était difficile de comprendre ou de déboguer ce qui ne va pas, le fichier ".ttf" fonctionne pour Android et IOS mais pas pour UWP (Glyph).
J'ai donc essayé d'utiliser le fichier .otf et cela fonctionne pour les trois plates-formes d'image (Glyph).

Une autre chose étrange est que ".ttf" fonctionne dans les trois plates-formes pour la police de texte (je ne sais pas comment expliquer, mais le fichier Roboto-Italic.ttf fonctionnera sur les 3 plates-formes) mais comme je l'ai déjà dit, Glyph du fichier .ttf ne l'est pas travail.

J'espère que nous aurons bientôt une solution à ce problème.

@Samit.
Je crois que votre code fait référence à la manière «héritée» de prendre en charge les polices personnalisées dans Xamarin. Dans ce scénario, vous installez votre fichier de police dans chaque dossier de projet et ajoutez du code manifeste, puis faites référence au nom de police tel que vous le présentez dans votre exemple de fichier de ressources où chaque plate-forme obtient une variation légèrement différente du nom de fichier.
Le problème qui a été signalé ici avec la fonctionnalité «ExportFont» qui a été récemment introduite avec Xamarin et vous permet d'inclure la police une fois dans le projet partagé, puis de la faire connaître à l'application avec une directive ExportFont.
[assembly: ExportFont ("Samantha.ttf", Alias ​​= "MyAwesomeCustomFont")]

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

Le bogue a signalé que cela fonctionne pour les projets Android et iOS mais pas pour UWP où nous devons revenir à la méthode précédente.

Face au même problème ici. Nous utilisions l'incorporation de polices qui fonctionne comme un jeu d'enfant sur Android et iOS. Et nous avons ajouté un projet UWP supplémentaire en raison de certaines exigences des clients. Cela ne fonctionne pas du tout et nous ne voyons que des boîtes.

Samit, j'ai une police .ttf fonctionnant avec Embedded / ExportFont sur Android / iOS.
Le dépannage est un jeu d'enfant - aucun message ou métrique pour vous aider à comprendre pourquoi cela ne fonctionne pas. C'est quelque chose que je n'aime pas avec la base de code Xamarin, dans de nombreux cas où vous passez un paramètre incorrect, la fonction ne fait rien au lieu de vous informer qu'une valeur de paramètre est incorrecte. Les messages d'erreur / journalisation / exceptions peuvent être vraiment utiles.

Salut Chris,

Oui, j'ai observé le même comportement et il était difficile de comprendre ou de déboguer ce qui ne va pas, le fichier ".ttf" fonctionne pour Android et IOS mais pas pour UWP (Glyph).
J'ai donc essayé d'utiliser le fichier .otf et cela fonctionne pour les trois plates-formes d'image (Glyph).

Une autre chose étrange est que ".ttf" fonctionne dans les trois plates-formes pour la police de texte (je ne sais pas comment expliquer, mais le fichier Roboto-Italic.ttf fonctionnera sur les 3 plates-formes) mais comme je l'ai déjà dit, Glyph du fichier .ttf ne l'est pas travail.

J'espère que nous aurons bientôt une solution à ce problème.

Vous voudrez peut-être vérifier que la raison pour laquelle "Roboto-Italic.ttf" fonctionne sur les 3 plates-formes est parce qu'il est physiquement installé sur la machine Windows que vous utilisez pour tester.
Il m'a fallu beaucoup de temps pour comprendre pourquoi certaines polices fonctionnaient, avec ExportFont, sur UWP et d'autres pas jusqu'à ce que je réalise qu'il n'utilisait que des polices déjà installées dans Windows.

Le problème est que UWP veut que le nom de la police fasse partie du nom de la famille de polices. Xamarin Forms suppose à tort que le nom de police est identique au nom du fichier de police. Pour de nombreuses polices qui ne fonctionnent pas (FontAwesome par exemple)

Je vais créer un PR pour résoudre ce problème.

Xamarin.Forms: 4.8.0.1269
ExportFont fonctionne pour Android, mais pas pour UWP

Au lieu d'utiliser ExportFont dans le projet partagé, voici une solution de contournement:

  1. Copiez votre fichier de police (xxx.ttf) dans le dossier Assets du projet Androind et UWP:

[Android]:
Actifs / xxx.ttf
Action de construction: AndroidAsset
Copier dans le répertoire de sortie: ne pas copier

[UWP]:
Actifs / xxx.ttf
Action de création: contenu
Copier dans le répertoire de sortie: ne pas copier

  1. Définit la propriété FontFamily pour votre texte:

       <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>
    

Maintenant, cela fonctionne comme prévu!

@ johncao158 C'est l'ancienne façon d'utiliser des polices personnalisées dans Xamarin Forms, qui fonctionne depuis le début. Ce problème concerne spécifiquement [ExportFont] ne fonctionne pas sur UWP. La solution de contournement que vous avez suggérée ne vous permet toujours pas d'ajouter les polices en tant que ressource incorporée.

Mon projet fonctionne de cette façon:

[PROJET PARTAGÉ]
AssemblyInfo.cs
[assembly: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "pour iOS et Android"

Action de création: contenu
Copier dans le répertoire de sortie: ne pas copier

Mon projet fonctionne de cette façon:

[PROJET PARTAGÉ]
AssemblyInfo.cs
[assembly: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "pour iOS et Android"

Action de création: contenu
Copier dans le répertoire de sortie: ne pas copier

Vous avez raison. Cette nouvelle fonctionnalité fonctionne sur iOS et Android.
Le problème est que cela ne fonctionnera pas sous Windows à moins que la police ne soit déjà installée sur la machine.

Pourquoi cela a-t-il été fermé? Bien que les polices personnalisées fonctionnent dans le débogage UWP, elles ne fonctionnent pas dans une version commerciale.

Lorsque je les utilise dans une version sideload, la page sur laquelle se trouve la police personnalisée est complètement vide. Lorsque je commente la famille de polices en xaml, la page apparaît bien ... mais sans polices personnalisées, bien sûr.

J'ai également vérifié dans le dossier windows / font et la police se trouvait sur l'ordinateur portable sur lequel j'ai installé l'application.

J'ai le même problème que @ BillyMartin1964 sur la version UWP même avec le dernier XF 4.8.0.1534 + 384-sha.712849b9d-azdo.4114742

Nous avons également le même problème que @ BillyMartin1964 - c'était très déroutant car les polices fonctionnent bien sur Android / iOS et même UWP en mode débogage, mais pas en mode Release.

@samhouts existe-t-il une

À tout le moins, pouvons-nous avoir du code qui ignore la police personnalisée si elle n'est pas installée sur l'ordinateur / la XBox de l'utilisateur?

À tout le moins, pouvons-nous avoir du code qui ignore la police personnalisée si elle n'est pas installée sur l'ordinateur / la XBox de l'utilisateur?

Je pense que vous pouvez ajouter deux éléments sur la page et les rendre visibles en fonction de la plate-forme sur laquelle ils fonctionnent. Utilisez OnPlatform pour cela.

@ArtjomP , ce n'est pas le problème. La page entière est vierge lorsque nous utilisons la police intégrée sur un chargement latéral de version de version sur un autre PC. Quelqu'un a dit que c'était parce que l'autre PC n'avait pas la police précédemment installée. Je ne suis pas sûr de cela, mais si tel est le cas, nous devons tester la police installée et ne pas l'utiliser si elle n'est pas installée.

Personnellement, je pense que c'est un autre problème car il semble que la police se trouve dans le dossier des polices sur la machine de l'utilisateur.

@ BillyMartin1964 assez étrange mes pages fonctionnent toutes bien sur la version UWP. Les étiquettes avec une police personnalisée ne montrent que le carré comme sur l'image ci-dessus de @jsuarezruiz

@ArtjomP , installez-vous sur une autre machine?

@ BillyMartin1964 bien sûr que je développe des applications sur ma machine, CI avec des tests d'interface utilisateur sur une autre et les utilisateurs utilisent mes applications du Store sur leur PC et Xbox

@ArtjomP ,

@ BillyMartin1964, vous pouvez essayer de supprimer les dossiers obj et bin et reconstruire votre projet avec l'attribut FontFamily inclus. Cela aide parfois à se débarrasser d'erreurs mystérieuses.

Pourquoi cela a-t-il été fermé? Bien que les polices personnalisées fonctionnent dans le débogage UWP, elles ne fonctionnent pas dans une version commerciale.

Lorsque je les utilise dans une version sideload, la page sur laquelle se trouve la police personnalisée est complètement vide. Lorsque je commente la famille de polices en xaml, la page apparaît bien ... mais sans polices personnalisées, bien sûr.

J'ai également vérifié dans le dossier windows / font et la police se trouvait sur l'ordinateur portable sur lequel j'ai installé l'application.

Il y a un nouveau problème pour ceci: # 12404

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

deakjahn picture deakjahn  ·  3Commentaires

MartinWegner picture MartinWegner  ·  3Commentaires

EmilAlipiev picture EmilAlipiev  ·  3Commentaires

Hudhud picture Hudhud  ·  3Commentaires

joseluisct picture joseluisct  ·  3Commentaires