Xamarin.forms: [Bug] ExportFont tidak berfungsi di UWP

Dibuat pada 12 Apr 2020  ·  55Komentar  ·  Sumber: xamarin/Xamarin.Forms

Deskripsi

Font kustom tidak muncul di UWP saat ExportFontAttribute baru digunakan.

Langkah-langkah untuk Mereproduksi

  1. Tambahkan file TTF atau OTF dari Google Fonts, FontAwesome, icomoon, dll. Sebagai sumber daya yang disematkan dalam proyek bersama Anda
  2. Tambahkan atribut ExportFont ke assembly Anda. misal [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. Referensi keluarga font dalam markup XAML
  4. Kompilasi dan jalankan aplikasi UWP

Perilaku yang Diharapkan

Font khusus harus digunakan.

Perilaku Sebenarnya

Font khusus digunakan di iOS dan Android, tetapi tidak UWP.

Informasi dasar

  • Versi dengan masalah: 4.5.0.617
  • Kerangka Kerja Target Platform:

    • iOS: 13.4

    • Android: 9.0

    • UWP: 18362

Tautan Reproduksi

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

Komentar yang paling membantu

Saya mengalami masalah yang sama. Sepertinya UWP selalu menjadi renungan dengan Xamarin.Forms dan hampir tidak didukung. Saya mengerti penggunaannya mungkin jauh lebih sedikit daripada Android atau iOS, tetapi itu sangat membuat frustrasi.

Semua 55 komentar

Font Tersemat dengan format TTF atau OTF berfungsi di Android dan iOS.

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

Di UWP, font Fontawesome OTF tidak berfungsi seperti yang diharapkan:
Captura de pantalla 2020-04-20 a las 16 17 59

Saya mengalami masalah yang sama. Sepertinya UWP selalu menjadi renungan dengan Xamarin.Forms dan hampir tidak didukung. Saya mengerti penggunaannya mungkin jauh lebih sedikit daripada Android atau iOS, tetapi itu sangat membuat frustrasi.

Saya mengalami masalah ini di UWP juga. Namun saya membuatnya berfungsi ketika saya menjatuhkan Alias ​​dari deklarasi ExportFont.

Inilah yang saya lakukan:

  1. Saya membuat font saya sendiri. Mesin terbang yang saya gunakan semuanya dipetakan ke karakter huruf kecil
  2. Dalam proyek bersama saya di App.xaml.cs saya menambahkan: [assembly: ExportFont ("karenfont.ttf")]
  3. Saya menambahkan karenfont.ttf sebagai sumber daya yang disematkan ke direktori tingkat atas dari proyek bersama saya.
  4. Dalam file xamarin forms xaml saya, saya memiliki ini:
    <Button Text="b" FontFamily="karenfont"/>

Ini sekarang bekerja di UWP. Ini tidak berfungsi di Android. Saya menggunakan Xamarin Forms v4.5.0.617

Saya mengalami masalah yang sama. Sepertinya UWP selalu menjadi renungan dengan Xamarin.Forms dan hampir tidak didukung. Saya mengerti penggunaannya mungkin jauh lebih sedikit daripada Android atau iOS, tetapi itu sangat membuat frustrasi.

Saya pikir banyak pengembang Xamarin (dan pengembang studio visual yang mengerjakan hal-hal yang berhubungan dengan Xamarin) hanya menggunakan Mac, dan ketika mereka menggunakan windows mereka mengabaikan UWP. kadang-kadang mereka menyertakan UWP dalam proyek sampel, tetapi Jarang ditampilkan pada presentasi video - jadi saya bahkan tidak yakin bahwa fitur yang didemokan benar-benar berfungsi di UWP.

@jsuarezruiz Saya sekarang mencoba ExportFont pada versi rilis pertama Xamarin 4.6, saya telah mengikuti contoh yang ditunjukkan pada video Xamarin dan coba tebak, itu tidak berfungsi di UWP, saya hanya mendapatkan kotak. Bekerja dengan baik di Android. Sesuai contoh di aplikasi FlyMe, saya tidak menggunakan Alias. file font berada di level teratas dari proyek bersama. tidak bekerja.

Saya berada dalam posisi yang tidak menguntungkan karena harus mendukung iOS, Android, dan UWP untuk produk kami dan fakta bahwa UWP sering tertinggal membuat kami harus menunggu beberapa siklus rilis untuk benar-benar menggunakan fitur baru.
Kami punya tiga font khusus yang kami muat. Untuk alasan apa pun, font ikon adalah satu-satunya yang tidak bisa saya muat untuk UWP. Dua platform lainnya tidak memiliki masalah.

@joshminor jadi Anda mendapatkan 2 dari 3 font yang bekerja di UWP dengan metode ini?
Mungkin ada sesuatu yang spesifik untuk beberapa font yang menyebabkan masalah ...

Sebenarnya, saya baru menyadari bahwa dua font yang berfungsi diinstal sebagai font sistem pada mesin uji Windows saya ... jadi itu mungkin ada hubungannya dengan itu.
Edit
Saya mencoba menginstal font yang tidak berfungsi, itu tidak mengubah apa pun. Saya mencoba font yang sama sekali berbeda dari Google WebFonts ("Lobster") dan berfungsi tanpa masalah (kecuali alias tidak berfungsi)

Saya sudah mencoba font lobster dan satu-satunya cara kerjanya adalah jika saya sudah menginstalnya pada sistem. penyematan font tidak berfungsi.

Sunting: Saya mengambilnya kembali, itu berhasil (saya memiliki kesalahan ketik pada nama). jadi, tampaknya beberapa font berfungsi dan beberapa font tidak? sangat menarik

sedikit lebih banyak info

Saya telah mengambil font google ini, mengganti nama file dan referensinya dalam kode dari Lobster-Regular.ttf ke Lobster-Regular-renamed.ttf - ini membuatnya berhenti berfungsi. Pasang kembali nama aslinya, dan itu berfungsi kembali.
Hal ini mungkin menunjukkan bahwa nama file harus cocok dengan beberapa properti internal dalam font itu sendiri agar dapat berfungsi, dan dapat menjelaskan mengapa orang memiliki hasil yang berbeda dengan penerapan yang sama - hal ini bergantung pada sesuatu di dalam file font itu sendiri.

Saya baru saja memutakhirkan ke Formulir Xamarin 4.6.0.726 dan font tertanam saya, karenfont, masih berfungsi di UWP (Windows 10 1903). Ini masih tidak berfungsi di Android (Android 10).

Font yang tidak dapat dimuat untuk saya adalah font ikon kustom, saya memverifikasi dengan FontForge bahwa nama keluarga font internal persis sama dengan nama file, masih tidak dapat dimuat. Saya yakin ada pola di suatu tempat. Untuk saat ini saya akan kembali ke cara kami memuat font sebelumnya (sumber daya per platform)

Saya membuat font khusus saya menggunakan Aplikasi IcoMoon. Apa yang mungkin menarik adalah bahwa embedding karenfont tidak berfungsi sampai saya memetakan mesin terbang ke huruf dan kemudian mereferensikan surat itu di xaml saya (sebagai lawan menggunakan kode hex seperti: &#xf57e; )

Saya telah membuat ulang file font saya dan melihat bahwa itu dapat berfungsi, tetapi sepertinya nama font dan nama file harus serupa agar dapat berfungsi.

Saya juga menemukan bahwa meskipun tampaknya berfungsi, tidak semua elemen UI berfungsi seperti yang diharapkan, yaitu ikon bilah alat dengan sumber gambar font tampaknya tidak berfungsi, saya hanya mendapatkan kotak daripada ikon yang sesuai.

Saya mengalami masalah yang sama saat menggunakan MaterialDesignIcons Font (https://materialdesignicons.com/), berfungsi dengan baik di iOS dan Android tetapi semua persegi panjang di UWP.

Lihat hal yang sama di sini jika paket Font diinstal tampaknya berfungsi tetapi jika itu bagian dari proyek seperti FontAwesome atau MaterialDesignIcons yang tidak diinstal pada mesin, ini tidak akan berfungsi hanya dengan persegi panjang kecil.

Kembali ke cara lama menambahkan ke setiap proyek dan mereferensikan di ResourceDictionary berfungsi, tetapi itu lebih banyak pekerjaan dan bukan hotness baru.

Tidak yakin apakah ini regresi atau tidak pernah berhasil karena proyek saya yang lain belum menyertakan UWP.

sama di sini, hanya melihat kotak di UWP ...

Adakah pembaruan tentang kapan ini akan diselesaikan?

Sama di sini ... UWP tanpa harapan ...

Sama disini. Sepertinya UWP sudah mati.

Ok Semua saya perlu ini diperbaiki untuk proyek saya saat ini jadi saya akan melihat untuk memperbaikinya.

@samhouts @jsuarezruiz bisakah kamu menunjukkan ini sedang dikerjakan. Terima kasih

Oke, saya rasa saya telah menemukan apa yang terjadi di sini dan tidak perlu PR.

Untuk UWP, cara lama melakukannya adalah Anda menambahkan FontPack dengan OnPlatform ke ResourcesDictionary dan tampilannya seperti ini:

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

Perhatikan bahwa untuk Android dan UWP ada #Material Design Icons agar dapat bekerja dengan Embedded Font, bagian ini masih dibutuhkan oleh UWP.

Saya menemukan ini seperti dalam Xamarin Codebase untuk Control Gallery, XAML memiliki baris ini untuk halaman EmbeddedFonts:

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

Perhatikan #PTMono-Regular di sana di akhir Nama Font!

Jadi saya menambahkan #Material Design Icons ke akhir Nama Font saya seperti:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Dan Hai Presto berfungsi, saya memeriksa dan berfungsi di UWP / Droid dan iOS karena hanya itu yang saya butuhkan untuk proyek saya saat ini.

Jika Anda ingin mengetahui bagian setelah # itu adalah nama Font di dalam File Font dan cara termudah untuk mendapatkannya adalah (Bagaimanapun juga di Win10!) Buka file font dan di sana di atas adalah namanya:

image

Saya harap itu membantu Anda dan saya rasa masalah ini dapat diselesaikan @samhouts @jsuarezruiz karena tidak ada yang perlu diperbaiki kecuali Dokumen.

Saya pikir XF harus mendapatkan nama font pertama dari file jika tidak ditentukan oleh pengguna

Iya! Saya memiliki ini di app.xaml saya dan font telah berfungsi untuk saya:
<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 tetapi apakah Anda menggunakan EmbeddedFonts baru?

@VladislavAntonyuk Mungkin memang perlu melihat ke dalam. Saya belum mencobanya dengan versi XF yang lebih lama, jadi tidak yakin apakah ini pernah berfungsi di UWP atau ini adalah masalah baru, proyek saya saat ini menyoroti kepada saya. Senang melihat apakah itu cara Anda percaya itu harus berhasil.

Maaf - Saya berbicara terlalu cepat. Font yang saya gunakan sebagai font yang disematkan adalah font yang saya buat bernama karenfont. Saya memiliki masalah sebaliknya seperti orang lain: Ini berfungsi di UWP tetapi tidak di Android. Saya menggunakan XF 4.6.0.726, Windows 10 1903 di Surface Pro 7 dan Android 10 di Samsung Galaxy s10
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

Di Windows, huruf "b" terlihat seperti:
b on windows

Di Android, huruf "b" terlihat seperti:
b on android

Seperti apa font itu:
karenfont

Oke, saya rasa saya telah menemukan apa yang terjadi di sini dan tidak perlu PR.

Untuk UWP, cara lama melakukannya adalah Anda menambahkan FontPack dengan OnPlatform ke ResourcesDictionary dan tampilannya seperti ini:

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

Perhatikan bahwa untuk Android dan UWP ada #Material Design Icons agar dapat bekerja dengan Embedded Font, bagian ini masih dibutuhkan oleh UWP.

Saya menemukan ini seperti dalam Xamarin Codebase untuk Control Gallery, XAML memiliki baris ini untuk halaman EmbeddedFonts:

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

Perhatikan #PTMono-Regular di sana di akhir Nama Font!

Jadi saya menambahkan #Material Design Icons ke akhir Nama Font saya seperti:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

Dan Hai Presto berfungsi, saya memeriksa dan berfungsi di UWP / Droid dan iOS karena hanya itu yang saya butuhkan untuk proyek saya saat ini.

Jika Anda ingin mengetahui bagian setelah # itu adalah nama Font di dalam File Font dan cara termudah untuk mendapatkannya adalah (Bagaimanapun juga di Win10!) Buka file font dan di sana di atas adalah namanya:

image

Saya harap itu membantu Anda dan saya rasa masalah ini dapat diselesaikan @samhouts @jsuarezruiz karena tidak ada yang perlu diperbaiki kecuali Dokumen.

Hai,
apakah Anda mendapatkan ini bekerja pada proyek sampel? https://github.com/jfversluis/EmbeddedFontsSample
Saya mencoba, tetapi tidak berhasil.

Menambahkan #fontname sepertinya tidak berdampak apa-apa bagi saya. Saya pikir itu berhasil pada awalnya, tetapi saya setelah saya menghapus font dari sistem itu kembali menampilkan kotak. Saya mengonfirmasi dengan rekan kerja lain bahwa jika Anda menginstal font itu akan mulai ditampilkan dengan benar.

Saya melakukan sedikit penggalian dan ini ada _something_ yang harus dilakukan dengan file font. Saya dapat menukar ke font yang berbeda dan semuanya akan berfungsi dengan baik. Saya akan mencoba mengekspor ulang font kita dan melihat apakah saya bisa mendapatkan sesuatu untuk bekerja.

Ya setuju, ini tidak berfungsi di UWP. Tidak menambahkan #FontName seperti yang disarankan oleh @CliffAgius , kecuali Anda menginstal file Font secara manual di OS, Windows 10. Oleh karena itu, tidak, itu bukan perbaikan. :) dan perlu ditangani oleh tim @samhouts @jsuarezruiz .

Proyek sampel yang ditampilkan dalam blog rilis Xamarin itu sendiri tidak berfungsi untuk UWP, https://github.com/jfversluis/EmbeddedFontsSample
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

Sepertinya mereka sengaja membuang dukungan untuk Windows 10, setiap kali mereka mengeluarkan fitur baru di Xamarin. Bentuk hari ini! :(

@UdaraAlwis ya terima kasih untuk posting karena saya benar-benar lupa tentang ini, perbaikan saya berfungsi karena saya telah memuat FotPack ke mesin dev untuk sesuatu yang lain jadi saya pikir itu berfungsi. Segera setelah saya mendorong ke klien untuk pratinjau, itu rusak. Saya harus kembali ke cara lama bertele-tele untuk menambahkan font untuk proyek ini karena menargetkan UWP untuk beberapa pengguna.

Saya tidak setuju bahwa tim mengabaikan UWP dalam build hanya saja tes UI tidak ditulis untuk mengambil ini dan banyak pengembang menggunakan Mac jadi tidak dapat menguji UWP. Perlu ada cara yang lebih baik untuk melakukan ini, mungkin gaya #HotRestart untuk windows saat membangun di Mac.

Hanya menambahkan pilihan saya.
ExportFont hanya berfungsi di UWP jika font sudah diinstal di mesin Windows. Jadi itu tidak akan berfungsi pada mesin klien saat aplikasi diinstal.

Untuk saat ini, saya harus menempatkan font ke dalam folder dan mengatur Action sebagai Contents dan merujuknya dengan # notation

/fonts/xyx.ttf#xyz.ttf

Saya berhasil mendapatkan font untuk ditampilkan dengan benar ketika dalam mode debug atau ketika "kompilasi dengan .net native tool chain" dimatikan.
Mengaktifkan kembali kompilasi asli .net akan langsung merusak semua font.

Saya baru mengenal Xamarin, jadi solusi ini mungkin menyesatkan. saya menggunakan pendekatan yang dijelaskan oleh @CliffAgius Sekali lagi, saya mungkin menggunakan cara lama atau sepenuhnya salah.

Bagi saya, saya tidak perlu menginstal font apa pun . Satu-satunya cara ini bekerja untuk saya di semua 3 platform adalah dengan menggunakan file ".otf" daripada file ".ttf" .

File ".ttf" hanya berfungsi untuk jenis font teks tetapi tidak berfungsi untuk Glyph.
Bersamaan dengan ini saya harus menambahkan ".otf" ke folder spesifik platform masing-masing.

Berikut ini adalah penggunaan dan file sumber daya saya.

Kode di bawah ini tidak diuji untuk IOS.

Resource FIle:

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

Dan di Penggunaan 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, saya memiliki font .ttf yang berfungsi menggunakan embedded / ExportFont di Android / iOS.

Pemecahan masalah adalah untung atau rugi - tidak ada pesan atau metrik untuk membantu Anda memahami mengapa itu tidak berhasil. Ini adalah sesuatu yang saya tidak suka dengan basis kode Xamarin, dalam banyak kasus di mana Anda mengirimkan parameter yang salah, fungsinya tidak melakukan apa-apa alih-alih memberi tahu Anda bahwa nilai parameter salah. Pesan kesalahan / logging / pengecualian bisa sangat membantu.

Samit, saya memiliki font .ttf yang berfungsi menggunakan embedded / ExportFont di Android / iOS.

Pemecahan masalah adalah untung atau rugi - tidak ada pesan atau metrik untuk membantu Anda memahami mengapa itu tidak berhasil. Ini adalah sesuatu yang saya tidak suka dengan basis kode Xamarin, dalam banyak kasus di mana Anda mengirimkan parameter yang salah, fungsinya tidak melakukan apa-apa alih-alih memberi tahu Anda bahwa nilai parameter salah. Pesan kesalahan / logging / pengecualian bisa sangat membantu.

Halo Chris,

Ya, saya mengamati perilaku yang sama dan sulit untuk memahami atau men-debug apa yang salah, file ".ttf" berfungsi untuk android dan IOS tetapi tidak untuk UWP (Glyph).
Jadi saya mencoba menggunakan file .otf dan berfungsi untuk ketiga platform untuk gambar (Glyph).

Yang juga aneh adalah ".ttf" berfungsi di ketiga platform untuk font teks (tidak yakin bagaimana menjelaskannya tetapi file Roboto-Italic.ttf akan bekerja pada semua 3 platform) tetapi seperti yang saya katakan sebelumnya Glyph dari file .ttf tidak kerja.

Berharap kami akan segera memperbaikinya.

@Samaputra.
Saya yakin kode Anda mengacu pada cara "warisan" untuk mendukung font khusus di Xamarin. Dalam skenario itu, Anda menginstal file font di setiap folder project dan menambahkan beberapa kode manifes, lalu merujuk ke nama font yang Anda tunjukkan di contoh file resource di mana setiap platform mendapatkan variasi nama file yang sedikit berbeda.
Masalah yang dilaporkan di sini dengan fitur "ExportFont" yang baru-baru ini diperkenalkan dengan Xamarin dan memungkinkan Anda untuk memasukkan font satu kali dalam proyek Bersama dan kemudian membuatnya diketahui oleh aplikasi dengan direktif ExportFont.
[perakitan: ExportFont ("Samantha.ttf", Alias ​​= "MyAwesomeCustomFont")]

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

Bug melaporkan bahwa ini berfungsi untuk proyek Android dan iOS tetapi tidak untuk UWP di mana kami perlu kembali ke metode sebelumnya.

Menghadapi masalah yang sama di sini. Kami menggunakan penyematan font yang berfungsi sangat mudah di Android dan iOS. Dan kami menambahkan proyek UWP tambahan karena beberapa persyaratan klien. Itu tidak berfungsi sama sekali dan yang kami lihat hanyalah beberapa kotak.

Samit, saya memiliki font .ttf yang berfungsi menggunakan embedded / ExportFont di Android / iOS.
Pemecahan masalah adalah untung atau rugi - tidak ada pesan atau metrik untuk membantu Anda memahami mengapa itu tidak berhasil. Ini adalah sesuatu yang saya tidak suka dengan basis kode Xamarin, dalam banyak kasus di mana Anda mengirimkan parameter yang salah, fungsinya tidak melakukan apa-apa alih-alih memberi tahu Anda bahwa nilai parameter salah. Pesan kesalahan / logging / pengecualian bisa sangat membantu.

Halo Chris,

Ya, saya mengamati perilaku yang sama dan sulit untuk memahami atau men-debug apa yang salah, file ".ttf" berfungsi untuk android dan IOS tetapi tidak untuk UWP (Glyph).
Jadi saya mencoba menggunakan file .otf dan berfungsi untuk ketiga platform untuk gambar (Glyph).

Yang juga aneh adalah ".ttf" berfungsi di ketiga platform untuk font teks (tidak yakin bagaimana menjelaskannya tetapi file Roboto-Italic.ttf akan bekerja pada semua 3 platform) tetapi seperti yang saya katakan sebelumnya Glyph dari file .ttf tidak kerja.

Berharap kami akan segera memperbaikinya.

Anda mungkin ingin memeriksa bahwa alasan "Roboto-Italic.ttf" bekerja pada ketiga platform adalah karena secara fisik diinstal pada mesin Windows yang Anda gunakan untuk menguji.
Butuh waktu lama bagi saya untuk mencari tahu mengapa beberapa font berfungsi, dengan ExportFont, di UWP dan lainnya tidak sampai saya menyadari bahwa itu hanya menggunakan font yang sudah diinstal di Windows.

Masalahnya adalah UWP menginginkan nama font sebagai bagian dari nama keluarga font. Xamarin Forms salah mengasumsikan bahwa nama font sama dengan nama file font. Untuk banyak font yang tidak berfungsi (FontAwesome misalnya)

Saya akan membuat PR untuk memperbaiki masalah ini.

Xamarin.Forms: 4.8.0.1269
ExportFont berfungsi untuk Android, tetapi tidak untuk UWP

Alih-alih menggunakan ExportFont dalam proyek bersama, berikut solusinya:

  1. Salin file font Anda (xxx.ttf) ke folder Assets di proyek Androind dan UWP:

[Android]:
Aset / xxx.ttf
Build Action: AndroidAsset
Salin ke Direktori Output: Jangan salin

[UWP]:
Aset / xxx.ttf
Build Action: Konten
Salin ke Direktori Output: Jangan salin

  1. Setel properti FontFamily untuk teks Anda:

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

Sekarang berfungsi seperti yang diharapkan!

@ johncao158 Itulah cara lama menggunakan font kustom di Formulir Xamarin, yang telah berfungsi sejak awal. Masalah ini secara khusus tentang [ExportFont] tidak berfungsi di UWP. Solusi yang Anda sarankan masih tidak memungkinkan Anda menambahkan font sebagai sumber daya yang disematkan.

Proyek saya bekerja seperti ini:

[PROYEK BERSAMA]
AssemblyInfo.cs
[perakitan: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "untuk iOS dan Android"

Build Action: Konten
Salin ke Direktori Output: Jangan salin

Proyek saya bekerja seperti ini:

[PROYEK BERSAMA]
AssemblyInfo.cs
[perakitan: ExportFont ("entypo.ttf", Alias ​​= "entypo-plus")]
Fonts / entypo.ttf "untuk iOS dan Android"

Build Action: Konten
Salin ke Direktori Output: Jangan salin

Anda benar. Fitur baru ini berfungsi di iOS dan Android.
Masalahnya adalah itu tidak akan berfungsi di Windows kecuali font sudah diinstal pada mesin.

Mengapa ini ditutup? Meskipun font kustom berfungsi di debug UWP, font ini tidak berfungsi di versi rilis.

Saat saya menggunakannya dalam sideload versi rilis, halaman tempat font kustom aktif benar-benar kosong. Ketika saya mengomentari keluarga font di xaml, halaman tampak baik-baik saja ... tetapi tanpa font khusus, tentu saja.

Saya juga memeriksa di folder windows / font dan font ada di laptop tempat saya menginstal aplikasi.

Saya memiliki masalah yang sama dengan @ BillyMartin1964 pada rilis UWP bahkan dengan XF 4.8.0.1534 + 384-sha.712849b9d-azdo.4114742 terbaru

Kami juga memiliki masalah yang sama dengan @ BillyMartin1964 - sangat membingungkan karena font berfungsi dengan baik di Android / iOS dan bahkan UWP dalam mode Debug, tetapi tidak dalam mode Rilis.

@samhouts apakah ada solusi yang dapat kami gunakan untuk ini, dan dapatkah masalah dibuka kembali untuk memperbaiki mode rilis UWP juga?

Paling tidak, dapatkah kita memiliki kode yang mengabaikan font kustom jika tidak diinstal di komputer / XBox pengguna?

Paling tidak, dapatkah kita memiliki kode yang mengabaikan font kustom jika tidak diinstal di komputer / XBox pengguna?

Saya pikir Anda dapat menambahkan dua elemen pada halaman dan membuatnya terlihat tergantung pada platform tempat mereka berjalan. Gunakan OnPlatform untuk itu.

@ArtjomP , bukan itu masalahnya. Seluruh halaman kosong saat kami menggunakan font yang disematkan pada rilis build sideload ke PC lain. Seseorang berkata itu karena PC lain tidak memiliki font yang diinstal sebelumnya. Saya tidak yakin tentang ini, tetapi jika itu masalahnya, kita perlu menguji font yang diinstal dan tidak menggunakannya jika tidak diinstal.

Secara pribadi, saya pikir ini masalah lain karena tampaknya font tersebut ada di folder font di mesin pengguna.

@ BillyMartin1964 cukup aneh halaman saya semuanya bekerja dengan baik pada rilis UWP. Label dengan font custom hanya menampilkan kotak seperti gambar di atas dari @jsuarezruiz

@ ArtjomP , apakah Anda menginstal ke komputer lain?

@ BillyMartin1964 yakin saya sedang mengembangkan aplikasi di komputer saya, CI dengan pengujian UI di mesin lain dan pengguna menggunakan aplikasi saya dari Store di PC & Xbox mereka

@ArtjomP , tidak dapat memberi tahu Anda tentang toko karena saya takut menggunakannya di aplikasi produksi. Saya dapat memberitahu Anda, satu-satunya perbedaan antara halaman menjadi putih kosong atau tidak adalah menghapus atribut FontFamily. Kotak itu tampaknya menjadi ikon di miliknya.

@ BillyMartin1964 Anda dapat mencoba untuk menghapus folder obj & bin & membangun kembali proyek Anda dengan atribut FontFamily yang disertakan. Terkadang membantu menyingkirkan kesalahan misterius.

Mengapa ini ditutup? Meskipun font kustom berfungsi di debug UWP, font ini tidak berfungsi di versi rilis.

Saat saya menggunakannya dalam sideload versi rilis, halaman tempat font kustom aktif benar-benar kosong. Ketika saya mengomentari keluarga font di xaml, halaman tampak baik-baik saja ... tetapi tanpa font khusus, tentu saja.

Saya juga memeriksa di folder windows / font dan font ada di laptop tempat saya menginstal aplikasi.

Ada masalah baru untuk ini: # 12404

Apakah halaman ini membantu?
0 / 5 - 0 peringkat