Xamarin.forms: [Error] ExportFont no funciona en UWP

Creado en 12 abr. 2020  ·  55Comentarios  ·  Fuente: xamarin/Xamarin.Forms

Descripción

Las fuentes personalizadas no aparecen en UWP cuando se usa el nuevo ExportFontAttribute.

Pasos para reproducir

  1. Agregue un archivo TTF u OTF de Google Fonts, FontAwesome, icomoon, etc. como un recurso integrado en su proyecto compartido
  2. Agregue el atributo ExportFont a su ensamblado. por ejemplo, [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. Hacer referencia a la familia de fuentes en el marcado XAML
  4. Compile y ejecute la aplicación para UWP

Comportamiento esperado

Se debe utilizar una fuente personalizada.

Comportamiento real

La fuente personalizada se usa en iOS y Android, pero no en UWP.

Información básica

  • Versión con problema: 4.5.0.617
  • Marcos de destino de la plataforma:

    • iOS: 13.4

    • Android: 9.0

    • UWP: 18362

Enlace de reproducción

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

Comentario más útil

Estoy experimentando el mismo problema. Parece que UWP siempre es una ocurrencia tardía con Xamarin.Forms y no se admite tan bien. Entiendo que su uso es probablemente mucho menor que el de Android o iOS, pero es muy frustrante.

Todos 55 comentarios

Las fuentes incrustadas con formato TTF u OTF funcionan en Android e iOS.

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

En UWP, la fuente Fontawesome OTF no funciona como se esperaba:
Captura de pantalla 2020-04-20 a las 16 17 59

Estoy experimentando el mismo problema. Parece que UWP siempre es una ocurrencia tardía con Xamarin.Forms y no se admite tan bien. Entiendo que su uso es probablemente mucho menor que el de Android o iOS, pero es muy frustrante.

También tuve este problema en UWP. Sin embargo, lo hice funcionar cuando eliminé el Alias ​​de la declaración ExportFont.

Esto es lo que hice:

  1. Creé mi propia fuente. Todos los glifos que utilicé se asignaron a caracteres en minúscula
  2. En mi proyecto compartido en App.xaml.cs agregué: [ensamblaje: ExportFont ("karenfont.ttf")]
  3. Agregué karenfont.ttf como un recurso incrustado en el directorio de nivel superior de mi proyecto compartido.
  4. En mi archivo xaml de formularios xamarin tenía esto:
    <Button Text="b" FontFamily="karenfont"/>

Esto ahora funciona en UWP. No funciona en Android. Estoy usando Xamarin Forms v4.5.0.617

Estoy experimentando el mismo problema. Parece que UWP siempre es una ocurrencia tardía con Xamarin.Forms y no se admite tan bien. Entiendo que su uso es probablemente mucho menor que el de Android o iOS, pero es muy frustrante.

Creo que muchos desarrolladores de Xamarin (y desarrolladores de Visual Studio que trabajan en cosas que se relacionan con Xamarin) solo usan Mac, y cuando usan Windows, simplemente ignoran UWP. a veces incluyen UWP en los proyectos de muestra, pero rara vez se muestran en presentaciones de video, por lo que ni siquiera estoy seguro de que las características que se están demostrando realmente funcionen en UWP.

@jsuarezruiz Ahora estoy probando ExportFont en la primera versión de lanzamiento de Xamarin 4.6, seguí el ejemplo que se muestra en un video de Xamarin y adivinen qué, no funciona en UWP, solo obtengo cuadrados. Funciona bien en Android. Según el ejemplo de la aplicación FlyMe, no estoy usando un alias. el archivo de fuente está en el nivel superior del proyecto compartido. no funciona.

Estoy en la desafortunada posición de tener que admitir iOS, Android y UWP para nuestro producto y el hecho de que UWP se quede atrás con tanta frecuencia nos llevó a tener que esperar varios ciclos de lanzamiento para usar realmente las nuevas funciones.
Tenemos tres fuentes personalizadas que cargamos. Por alguna razón, la fuente del icono es la única que no puedo cargar para UWP. Las otras dos plataformas no tienen problemas.

@joshminor, ¿ así que 2 de cada 3 fuentes funcionan en UWP con este método?
Tal vez haya algo específico en algunas fuentes que esté causando el problema ...

En realidad, me acabo de dar cuenta de que las dos fuentes que funcionan están instaladas como fuentes del sistema en mi máquina de prueba de Windows ... así que eso puede tener algo que ver.
Editar
Intenté instalar la fuente que no funciona, no cambió nada. Probé una fuente completamente diferente de Google WebFonts ("Lobster") y funciona sin problemas (excepto que los alias no funcionan)

Probé la fuente de langosta y la única forma en que funcionó fue si la tenía instalada en el sistema. la incrustación de fuentes no funcionó.

Editar: lo retiro, funcionó (tenía un error tipográfico en el nombre). Entonces, ¿parece que algunas fuentes funcionan y otras no? muy intrigante

un poco más de información

Tomé esta fuente de Google, renombré el archivo y sus referencias en el código de Lobster-Regular.ttf a Lobster-Regular-renamed.ttf, esto hizo que dejara de funcionar. Vuelva a poner el nombre original y funciona de nuevo.
esto probablemente indica que el nombre del archivo debe coincidir con alguna propiedad interna en la fuente para que funcione, y podría explicar por qué las personas tienen resultados diferentes con la misma implementación; depende de algo dentro del archivo de fuente.

Acabo de actualizar a Xamarin Forms 4.6.0.726 y mi fuente incrustada, karenfont, todavía funciona en UWP (Windows 10 1903). Todavía no funciona en Android (Android 10).

La fuente que no se carga para mí es una fuente de icono personalizada, verifiqué con FontForge que los nombres de las familias de fuentes internas son exactamente iguales que el nombre del archivo, pero aún así no se cargan. Estoy seguro de que hay un patrón aquí en alguna parte. Por el momento, voy a recurrir a la forma en que cargamos las fuentes antes (recursos por plataforma)

Creé mi fuente personalizada usando la aplicación IcoMoon. Lo que puede ser de interés es que la incrustación de karenfont no funcionó hasta que asigné los glifos a las letras y luego hice referencia a la letra en mi xaml (en lugar de usar el código hexadecimal como: &#xf57e; )

He recreado mi archivo de fuente y veo que puede funcionar, pero parece que el nombre de la fuente y el nombre del archivo deben ser similares para que tenga la oportunidad de funcionar.

También descubrí que incluso cuando parece funcionar, no todos los elementos de la interfaz de usuario funcionan como se esperaba, es decir, los íconos de la barra de herramientas con fuente de imagen de fuente no parecen funcionar, solo obtengo un cuadrado en lugar del ícono adecuado.

Tengo el mismo problema con la fuente MaterialDesignIcons (https://materialdesignicons.com/), funciona bien en iOS y Android, pero todos los rectángulos en UWP.

Vea lo mismo aquí si el paquete de fuentes está instalado, parece funcionar, pero si es parte del proyecto, como FontAwesome o MaterialDesignIcons, que no están instalados en la máquina, no funcionarán solo pequeños rectángulos.

Volver a la forma antigua de agregar a cada proyecto y hacer referencia en el ResourceDictionary funciona, pero eso es más trabajo y no el nuevo atractivo.

No estoy seguro si esto es una regresión o nunca funcionó, ya que mis otros proyectos no han incluido UWP.

lo mismo aquí, viendo solo cuadrados en UWP ...

¿Alguna actualización sobre cuándo se resolverá esto?

Lo mismo aquí ... UWP sin esperanza ...

Igual que aquí. Parece que UWP está muerto.

Ok, todo lo que necesito es arreglado para mi proyecto actual, así que voy a echar un vistazo a arreglarlo.

@samhouts @jsuarezruiz, ¿ podría mostrar que se está trabajando? Gracias

OK, creo que he descubierto lo que está sucediendo aquí y no necesita un PR.

Para UWP, la antigua forma de hacerlo era agregar el FontPack con un OnPlatform al ResourcesDictionary y se veía así:

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

Tenga en cuenta que para Android y UWP existe el #Material Design Icons para que funcione con la fuente incrustada, esta parte aún es necesaria para UWP.

Encontré esto como en Xamarin Codebase para la Galería de control, el XAML tenía esta línea para la página EmbeddedFonts:

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

¡Observe los #PTMono-Regular allí al final del nombre de la fuente!

Así que agregué #Material Design Icons al final de mi nombre de fuente así:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Y Hey Presto funciona, verifiqué y funciona en UWP / Droid e iOS, ya que eso es todo lo que necesito para mi proyecto actual.

Si desea saber la parte que va después del #, es el nombre de la fuente dentro del archivo de fuente y la forma más fácil de obtenerlo es (¡en Win10 de todos modos!) Abrir el archivo de fuente y allí en la parte superior está el nombre:

image

Espero que eso te ayude y supongo que cierra este problema @samhouts @jsuarezruiz ya que no hay nada que arreglar excepto los Documentos.

Creo que XF debería obtener el primer nombre de fuente del archivo si no lo especifica el usuario

¡Si! Tengo esto en mi app.xaml y las fuentes me han funcionado:
<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, pero ¿está utilizando los nuevos EmbeddedFonts?

@VladislavAntonyuk Tal vez sea necesario investigarlo entonces. No lo he probado con una versión anterior de XF, así que no estoy seguro de si alguna vez funcionó en UWP o si es un problema nuevo, mi proyecto actual me lo destacó. Feliz de echar un vistazo si así es como crees que debería funcionar.

Lo siento, hablé demasiado pronto. La fuente que estoy usando como fuente incrustada es una que creé llamada karenfont. Tengo el problema opuesto al de todos los demás: funciona en UWP pero no en Android. Estoy usando XF 4.6.0.726, Windows 10 1903 en Surface Pro 7 y Android 10 en un Samsung Galaxy s10
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

En Windows, la letra "b" se ve así:
b on windows

En Android, la letra "b" se ve así:
b on android

Cómo se ve la fuente:
karenfont

OK, creo que he descubierto lo que está sucediendo aquí y no necesita un PR.

Para UWP, la antigua forma de hacerlo era agregar el FontPack con un OnPlatform al ResourcesDictionary y se veía así:

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

Tenga en cuenta que para Android y UWP existe el #Material Design Icons para que funcione con la fuente incrustada, esta parte aún es necesaria para UWP.

Encontré esto como en Xamarin Codebase para la Galería de control, el XAML tenía esta línea para la página EmbeddedFonts:

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

¡Observe los #PTMono-Regular allí al final del nombre de la fuente!

Así que agregué #Material Design Icons al final de mi nombre de fuente así:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Y Hey Presto funciona, verifiqué y funciona en UWP / Droid e iOS, ya que eso es todo lo que necesito para mi proyecto actual.

Si desea saber la parte que va después del #, es el nombre de la fuente dentro del archivo de fuente y la forma más fácil de obtenerlo es (¡en Win10 de todos modos!) Abrir el archivo de fuente y allí en la parte superior está el nombre:

image

Espero que eso te ayude y supongo que cierra este problema @samhouts @jsuarezruiz ya que no hay nada que arreglar excepto los Documentos.

Hola,
¿Consigues que esto funcione en el proyecto de muestra? https://github.com/jfversluis/EmbeddedFontsSample
Lo intenté, pero sin éxito.

Agregar el #nombredefuente no pareció hacer nada por mí. Al principio pensé que funcionaba, pero después de desinstalar la fuente del sistema, volvió a mostrar cuadrados. Confirmé con otro compañero de trabajo que si instala la fuente, comenzará a mostrarse correctamente.

Investigué un poco más y esto tiene algo que ver con el archivo de fuentes. Puedo cambiar a diferentes fuentes y todo funcionará bien. Voy a intentar volver a exportar nuestra fuente y ver si puedo hacer que algo funcione.

Sí, de acuerdo, no funciona en UWP. Tampoco agregue el #FontName como lo sugiere @CliffAgius , a menos que instale el archivo de fuente manualmente en el sistema operativo, Windows 10. Por lo tanto, no, eso no es una solución. :) y debe ser abordado por el equipo @samhouts @jsuarezruiz por favor.

El proyecto de muestra que se incluye en el blog de lanzamiento de Xamarin no funciona para UWP, https://github.com/jfversluis/EmbeddedFontsSample
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

¡Parece que están descartando intencionalmente el soporte para Windows 10, cada vez que lanzan una nueva característica en Xamarin.Forms en estos días! :(

@UdaraAlwis sí, gracias por publicar ya que me había olvidado por completo de esto, mi solución funcionó ya que tenía el FotPack cargado en la máquina de desarrollo para otra cosa, así que pensé que estaba funcionando. Tan pronto como presioné a un cliente para obtener una vista previa, se rompió. Tuve que volver a la antigua forma de agregar fuentes para este proyecto, ya que apunta a UWP para algunos usuarios.

No estoy de acuerdo en que el equipo esté ignorando UWP en las compilaciones, es solo que las pruebas de IU no están escritas para detectar esto y muchos desarrolladores usan Mac, por lo que no pueden probar UWP. Es necesario que haya una mejor manera de hacer esto, tal vez un estilo #HotRestart para Windows cuando se construye en una Mac.

Solo agrego mi voto.
ExportFont solo funciona en UWP si la fuente ya está instalada en la máquina con Windows. Por lo tanto, no funcionará en la máquina cliente cuando se instale la aplicación.

Por ahora, tuve que colocar las fuentes en una carpeta y establecer la Acción como Contenido y hacer referencia a ella con la notación #

/fonts/xyx.ttf#xyz.ttf

Me las arreglé para que las fuentes se mostraran correctamente cuando estaba en modo de depuración o cuando "compilar con la cadena de herramientas nativas .net" está desactivado.
Al volver a activar la compilación nativa de .net, se romperán inmediatamente todas las fuentes.

Soy nuevo en Xamarin, por lo que esta solución puede ser engañosa. Usé el enfoque explicado por

Para mí, no tengo que instalar ninguna fuente . La única forma en que funciona para mí en las 3 plataformas es utilizando archivos ".otf" en lugar de archivos ".ttf" .

Los archivos ".ttf" solo funcionan para la familia de fuentes de texto, pero la dosis no funciona para Glyph.
Junto con esto, tengo que agregar ".otf" a una carpeta específica de la plataforma respectiva.

A continuación se muestra mi archivo de uso y recursos.

El siguiente código no probado para IOS.

Archivo de recursos:

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

Y en 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, tengo una fuente .ttf que funciona usando embedded / ExportFont en Android / iOS.

Sin embargo, la solución de problemas es un éxito o un error: no hay mensajes ni métricas que lo ayuden a comprender por qué no funciona. Esto es algo que no me gusta con el código base de Xamarin, en muchos casos donde pasa un parámetro incorrecto, la función simplemente no hace nada en lugar de informarle que el valor de un parámetro es incorrecto. Los mensajes de error / registro / excepciones pueden ser realmente útiles.

Samit, tengo una fuente .ttf que funciona usando embedded / ExportFont en Android / iOS.

Sin embargo, la solución de problemas es un éxito o un error: no hay mensajes ni métricas que lo ayuden a comprender por qué no funciona. Esto es algo que no me gusta con el código base de Xamarin, en muchos casos donde pasa un parámetro incorrecto, la función simplemente no hace nada en lugar de informarle que el valor de un parámetro es incorrecto. Los mensajes de error / registro / excepciones pueden ser realmente útiles.

Hola Chris,

Sí, observé el mismo comportamiento y fue difícil entender o depurar lo que estaba mal, el archivo ".ttf" funciona para Android e IOS pero no para UWP (Glyph).
Así que intenté usar el archivo .otf y funciona para las tres plataformas de imagen (Glyph).

También lo extraño es que ".ttf" funciona en las tres plataformas para la fuente de texto (no estoy seguro de cómo explicarlo, pero el archivo Roboto-Italic.ttf funcionará en las 3 plataformas) pero como dije antes, el Glyph del archivo .ttf no es trabajando.

Espero que tengamos una solución para esto pronto.

@ Samit.
Creo que su código se refiere a la forma "heredada" de admitir fuentes personalizadas en Xamarin. En ese escenario, instale su archivo de fuente en cada carpeta de proyecto y agregue algún código de manifiesto, y luego consulte el nombre de fuente como lo presenta en su ejemplo de archivo de recursos donde cada plataforma obtiene una variación ligeramente diferente del nombre de archivo.
El problema que se informó aquí con la función "ExportFont" que se introdujo recientemente con Xamarin y le permite incluir la fuente una vez en el proyecto compartido y luego darla a conocer a la aplicación con una directiva ExportFont.
[ensamblado: ExportFont ("Samantha.ttf", Alias ​​= "MyAwesomeCustomFont")]

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

El error informó que esto funciona para proyectos de Android e iOS, pero no para UWP, donde necesitamos volver al método anterior.

Frente al mismo problema aquí. Estábamos usando la incrustación de fuentes, que funciona como una brisa en Android e iOS. Y agregamos un proyecto de UWP adicional debido a algunos requisitos del cliente. No funciona en absoluto y todo lo que vemos son algunas cajas.

Samit, tengo una fuente .ttf que funciona usando embedded / ExportFont en Android / iOS.
Sin embargo, la solución de problemas es un éxito o un error: no hay mensajes ni métricas que lo ayuden a comprender por qué no funciona. Esto es algo que no me gusta con el código base de Xamarin, en muchos casos donde pasa un parámetro incorrecto, la función simplemente no hace nada en lugar de informarle que el valor de un parámetro es incorrecto. Los mensajes de error / registro / excepciones pueden ser realmente útiles.

Hola Chris,

Sí, observé el mismo comportamiento y fue difícil entender o depurar lo que estaba mal, el archivo ".ttf" funciona para Android e IOS pero no para UWP (Glyph).
Así que intenté usar el archivo .otf y funciona para las tres plataformas de imagen (Glyph).

También lo extraño es que ".ttf" funciona en las tres plataformas para la fuente de texto (no estoy seguro de cómo explicarlo, pero el archivo Roboto-Italic.ttf funcionará en las 3 plataformas) pero como dije antes, el Glyph del archivo .ttf no es trabajando.

Espero que tengamos una solución para esto pronto.

Es posible que desee comprobar que la razón por la que "Roboto-Italic.ttf" funciona en las 3 plataformas es porque está físicamente instalado en la máquina Windows que está utilizando para probar.
Me tomó mucho tiempo descubrir por qué algunas fuentes funcionaban, con ExportFont, en UWP y otras no hasta que me di cuenta de que solo usaba fuentes que ya estaban instaladas en Windows.

El problema es que UWP quiere el nombre de la fuente como parte del nombre de la familia de fuentes. Xamarin Forms asume erróneamente que el nombre de la fuente es el mismo que el nombre del archivo de fuente. Para muchas fuentes que no funcionan (FontAwesome por ejemplo)

Crearé un PR para solucionar este problema.

Xamarin.Forms: 4.8.0.1269
ExportFont funciona para Android, pero no para UWP

En lugar de utilizar ExportFont en el proyecto compartido, aquí hay una solución:

  1. Copie su archivo de fuente (xxx.ttf) a la carpeta Assets en Androind y el proyecto UWP:

[Androide]:
Activos / xxx.ttf
Acción de compilación: AndroidAsset
Copiar al directorio de salida: no copiar

[UWP]:
Activos / xxx.ttf
Acción de compilación: contenido
Copiar al directorio de salida: no copiar

  1. Establece la propiedad FontFamily para su texto:

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

¡Ahora funciona como se esperaba!

@ johncao158 Esa es la forma heredada de usar fuentes personalizadas en Xamarin Forms, que ha funcionado desde el principio. Este problema se trata específicamente de que [ExportFont] no funciona en UWP. La solución alternativa que sugirió aún no le permite agregar las fuentes como un recurso incrustado.

Mi proyecto funciona de esta manera:

[PROYECTO COMPARTIDO]
AssemblyInfo.cs
[ensamblado: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "para iOS y Android"

Acción de compilación: contenido
Copiar al directorio de salida: no copiar

Mi proyecto funciona de esta manera:

[PROYECTO COMPARTIDO]
AssemblyInfo.cs
[ensamblado: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "para iOS y Android"

Acción de compilación: contenido
Copiar al directorio de salida: no copiar

Estás en lo correcto. Esta nueva característica funciona en iOS y Android.
El problema es que no funcionará en Windows a menos que la fuente ya esté instalada en la máquina.

¿Por qué estaba esto cerrado? Aunque las fuentes personalizadas funcionan en la depuración de UWP, no funcionan en una versión de lanzamiento.

Cuando los uso en una descarga lateral de la versión de lanzamiento, la página en la que se encuentra la fuente personalizada está completamente en blanco. Cuando comento la familia de fuentes en xaml, la página parece estar bien ... pero sin fuentes personalizadas, por supuesto.

También revisé la carpeta windows / font y la fuente estaba en la computadora portátil en la que instalé la aplicación.

Tengo el mismo problema que @ BillyMartin1964 en la versión de UWP incluso con la última versión de XF 4.8.0.1534 + 384-sha.712849b9d-azdo.4114742

También tenemos el mismo problema que @ BillyMartin1964 : fue muy confuso ya que las fuentes funcionan bien en Android / iOS e incluso UWP en el modo de depuración, pero no en el modo de lanzamiento.

@samhouts, ¿hay alguna

Como mínimo, ¿podemos tener un código que ignore la fuente personalizada si no está instalado en la computadora del usuario / XBox?

Como mínimo, ¿podemos tener un código que ignore la fuente personalizada si no está instalado en la computadora del usuario / XBox?

Creo que puede agregar dos elementos en la página y hacerlos visibles según la plataforma en la que se ejecutan. Utilice OnPlatform para eso.

@ArtjomP , ese no es el problema. Toda la página está en blanco cuando usamos la fuente incrustada en una carga lateral de compilación de lanzamiento a otra PC. Alguien dijo que es porque la otra PC no tenía la fuente instalada previamente. No estoy seguro de esto, pero si ese es el caso, necesitamos probar la fuente instalada y no usarla si no está instalada.

Personalmente, creo que es otro problema porque parece que la fuente estaba en la carpeta de fuentes en la máquina del usuario.

@ BillyMartin1964 Es bastante extraño que todas mis páginas funcionen bien en el lanzamiento de UWP. Las etiquetas con fuente personalizada solo muestran cuadrados como en la imagen de arriba de @jsuarezruiz

@ArtjomP , ¿está instalando en otra máquina?

@ BillyMartin1964 estoy seguro de que estoy desarrollando aplicaciones en mi máquina, CI con pruebas de interfaz de usuario en otra y los usuarios usan mis aplicaciones de la Tienda en su PC y Xbox.

@ArtjomP , no puedo contarte sobre la tienda porque tengo miedo de usarla en una aplicación de producción. Puedo decirles que la única diferencia entre que la página esté en blanco o no es eliminar el atributo FontFamily. El cuadrado parece ser un icono en el suyo.

@ BillyMartin1964 puede intentar eliminar las carpetas obj y bin y reconstruir su proyecto con el atributo FontFamily incluido. A veces ayuda a deshacerse de errores misteriosos.

¿Por qué estaba esto cerrado? Aunque las fuentes personalizadas funcionan en la depuración de UWP, no funcionan en una versión de lanzamiento.

Cuando los uso en una descarga lateral de la versión de lanzamiento, la página en la que se encuentra la fuente personalizada está completamente en blanco. Cuando comento la familia de fuentes en xaml, la página parece estar bien ... pero sin fuentes personalizadas, por supuesto.

También revisé la carpeta windows / font y la fuente estaba en la computadora portátil en la que instalé la aplicación.

Hay un nuevo problema para esto: # 12404

¿Fue útil esta página
0 / 5 - 0 calificaciones