Xamarin.forms: [خطأ] لا يعمل ExportFont على UWP

تم إنشاؤها على ١٢ أبريل ٢٠٢٠  ·  55تعليقات  ·  مصدر: xamarin/Xamarin.Forms

وصف

لا تظهر الخطوط المخصصة في UWP عند استخدام ExportFontAttribute الجديدة.

خطوات التكاثر

  1. أضف ملف TTF أو OTF من Google Fonts و FontAwesome و icomoon وما إلى ذلك كمورد مضمن في مشروعك المشترك
  2. أضف سمة ExportFont إلى التجميع الخاص بك. على سبيل المثال ، [assembly: ExportFont("FA5Regular.otf", Alias = "FontAwesome")]
  3. قم بالإشارة إلى عائلة الخطوط في ترميز XAML
  4. قم بتجميع وتشغيل تطبيق UWP

سلوك متوقع

يجب استخدام الخط المخصص.

السلوك الفعلي

يتم استخدام الخط المخصص في iOS و Android ، ولكن ليس UWP.

معلومات اساسية

  • الإصدار الذي يحتوي على الإصدار: 4.5.0.617
  • الأطر المستهدفة للمنصة:

    • iOS: 13.4

    • أندرويد: 9.0

    • UWP: 18362

رابط الاستنساخ

https://github.com/jfversluis/EmbeddedFontsSample

embedded fonts fonts 3 in-progress high impact UWP bug

التعليق الأكثر فائدة

أواجه نفس المشكلة. يبدو أن UWP دائمًا ما تكون فكرة متأخرة مع Xamarin. الأشكال ولا يتم دعمها تقريبًا أيضًا. أتفهم أن استخدامه ربما يكون أقل بكثير من Android أو iOS ، لكنه محبط للغاية.

ال 55 كومينتر

تعمل الخطوط المضمنة بتنسيق TTF أو OTF في Android و iOS.

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

في UWP ، لا يعمل خط Fontawesome OTF كما هو متوقع:
Captura de pantalla 2020-04-20 a las 16 17 59

أواجه نفس المشكلة. يبدو أن UWP دائمًا ما تكون فكرة متأخرة مع Xamarin. الأشكال ولا يتم دعمها تقريبًا أيضًا. أتفهم أن استخدامه ربما يكون أقل بكثير من Android أو iOS ، لكنه محبط للغاية.

لدي هذه المشكلة في UWP أيضًا. ومع ذلك ، فقد نجحت في العمل عندما أسقطت الاسم المستعار من تصريح ExportFont.

هذا ما فعلته:

  1. لقد صنعت الخط الخاص بي. تم تعيين جميع الحروف الرسومية التي استخدمتها إلى أحرف صغيرة
  2. في بلدي المشروع المشترك في App.xaml.cs أضفت: [التجميع: ExportFont ("karenfont.ttf")]
  3. أضفت karenfont.ttf كمورد مضمن إلى دليل المستوى الأعلى لمشروعي المشترك.
  4. في ملف xamarin لنماذج xaml الخاصة بي كان لدي هذا:
    <Button Text="b" FontFamily="karenfont"/>

يعمل هذا الآن على UWP. لا يعمل على Android. أنا أستخدم نماذج Xamarin v4.5.0.617

أواجه نفس المشكلة. يبدو أن UWP دائمًا ما تكون فكرة متأخرة مع Xamarin. الأشكال ولا يتم دعمها تقريبًا أيضًا. أتفهم أن استخدامه ربما يكون أقل بكثير من Android أو iOS ، لكنه محبط للغاية.

أعتقد أن الكثير من مطوري Xamarin (ومطوري الاستوديوهات المرئية الذين يعملون على أشياء تتعلق بـ Xamarin) يستخدمون أجهزة Mac فقط ، وعندما يستخدمون Windows يتجاهلون UWP تمامًا. في بعض الأحيان يقومون بتضمين UWP في نماذج المشاريع ، ولكن نادرًا ما يتم عرضها في عروض الفيديو - لذلك لست متأكدًا من أن الميزات التي يتم عرضها تعمل بالفعل على UWP.

jsuarezruiz أنا أحاول الآن ExportFont على الإصدار الأول من Xamarin 4.6 ، لقد اتبعت المثال الموضح في فيديو Xamarin وخمن ماذا ، إنه لا يعمل على UWP ، أحصل على مربعات فقط. يعمل بشكل جيد على Android. وفقًا للمثال الموجود في تطبيق FlyMe ، لا أستخدم الاسم المستعار. ملف الخط موجود في المستوى العلوي من المشروع المشترك. لا يعمل.

أنا في موقف مؤسف حيث اضطررت إلى دعم أنظمة التشغيل iOS و Android و UWP لمنتجنا وحقيقة أن UWP تُترك وراءه كثيرًا مما دفعنا إلى الانتظار عدة دورات إصدار لاستخدام ميزات جديدة بالفعل.
لدينا ثلاثة خطوط مخصصة نقوم بتحميلها. لأي سبب من الأسباب ، فإن خط الرمز هو الوحيد الذي لا يمكنني تحميله لـ UWP. المنصتان الأخريان ليس لديهما مشاكل.

joshminor حتى تحصل على
ربما هناك شيء محدد لبعض الخطوط هو الذي يسبب المشكلة ...

في الواقع ، لقد أدركت للتو أن الخطين اللذين يعملان يتم تثبيتهما كخطوط نظام على جهاز اختبار Windows الخاص بي ... لذلك قد يكون لذلك علاقة به.
تعديل
حاولت تثبيت الخط الذي لا يعمل ، ولم يغير شيئًا. لقد جربت خطًا مختلفًا تمامًا عن Google WebFonts ("Lobster") وهو يعمل بدون أية مشكلات (باستثناء عدم عمل الأسماء المستعارة)

لقد جربت خط جراد البحر والطريقة الوحيدة التي كان يعمل بها هي إذا قمت بتثبيته على النظام. لم يعمل تضمين الخط.

تحرير: لقد استعادتها ، لقد نجحت (كان لدي خطأ مطبعي في الاسم). لذا ، يبدو أن بعض الخطوط تعمل وبعض الخطوط لا تعمل؟ مثير للغاية

معلومات أكثر قليلا

لقد التقطت خط google هذا ، وأعدت تسمية الملف ومراجعه في الكود من Lobster-Regular.ttf إلى Lobster-Regular-renamed.ttf - وهذا جعله يتوقف عن العمل. ضع الاسم الأصلي مرة أخرى ، وسيعمل مرة أخرى.
يشير هذا على الأرجح إلى أن اسم الملف يجب أن يتطابق مع بعض الخصائص الداخلية في الخط نفسه حتى يعمل ، ويمكن أن يفسر سبب حصول الأشخاص على نتائج مختلفة مع نفس التطبيق - يعتمد ذلك على شيء ما داخل ملف الخط نفسه.

لقد قمت للتو بالترقية إلى Xamarin Forms 4.6.0.726 وخطي المضمن ، karenfont ، لا يزال يعمل على UWP (Windows 10 1903). لا يزال لا يعمل على Android (Android 10).

الخط الذي لن يتم تحميله بالنسبة لي هو خط رمز مخصص ، لقد تحققت مع FontForge من أن أسماء عائلة الخطوط الداخلية هي نفسها تمامًا اسم الملف ، ولا يزال يتعذر تحميلها. أنا متأكد من وجود نمط هنا في مكان ما. في الوقت الحالي ، سأعود إلى الطريقة التي حملنا بها الخطوط من قبل (موارد لكل نظام أساسي)

لقد قمت بإنشاء الخط المخصص الخاص بي باستخدام تطبيق IcoMoon. ما قد يكون مفيدًا هو أن تضمين karenfont لم يعمل حتى قمت بتعيين الحروف الرسومية إلى الأحرف ثم أشرت إلى الحرف في xaml الخاص بي (بدلاً من استخدام الكود السداسي العشري مثل: &#xf57e; )

لقد أعدت إنشاء ملف الخط الخاص بي وأرى أنه يمكن أن يعمل ، ولكن يبدو أن اسم الخط واسم الملف يجب أن يكونا متشابهين حتى يكون لديهما فرصة للعمل

لقد اكتشفت أيضًا أنه حتى عندما يبدو أنها تعمل ، لا تعمل جميع عناصر واجهة المستخدم كما هو متوقع ، على سبيل المثال ، يبدو أن رموز شريط الأدوات مع مصدر صورة الخط لا تعمل ، بل أحصل على مربع بدلاً من الرمز المناسب.

أواجه نفس المشكلة باستخدام MaterialDesignIcons Font (https://materialdesignicons.com/) ، يعمل بشكل جيد على iOS و Android ولكن جميع المستطيلات على UWP.

شاهد الأمر نفسه هنا إذا كانت حزمة Font مثبتة يبدو أنها تعمل ولكن إذا كانت جزءًا من المشروع مثل FontAwesome أو MaterialDesignIcons التي لم يتم تثبيتها على الجهاز ، فلن تعمل فقط مستطيلات صغيرة.

العودة إلى الطريقة القديمة للإضافة إلى كل مشروع والرجوع إليها في ResourceDictionary يعمل ولكن هذا عمل أكثر وليس درجة حرارة جديدة.

لست متأكدًا مما إذا كان هذا انحدارًا أم أنه لم ينجح أبدًا لأن مشاريعي الأخرى لم تتضمن UWP.

نفس الشيء هنا ، مشاهدة المربعات فقط على UWP ...

أي تحديث متى سيتم حل هذا؟

نفس الشيء هنا ... UWP ميؤوس منه ...

كذلك هنا. يبدو أن UWP قد مات.

حسنًا ، كل ما أحتاجه ثابتًا لمشروعي الحالي ، لذا سأقوم بإلقاء نظرة على إصلاحه.

samhoutsjsuarezruiz ، هل يمكنك إظهار هذا على أنه قيد العمل. شكر

حسنًا ، أعتقد أنني وجدت ما يحدث هنا ولا يحتاج إلى علاقات عامة.

بالنسبة إلى UWP ، كانت الطريقة القديمة للقيام بذلك هي أنك أضفت FontPack مع OnPlatform إلى ResourcesDictionary وبدا الأمر كالتالي:

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

لاحظ أنه بالنسبة لنظامي Android و UWP ، يوجد #Material Design Icons لكي يعمل مع Embedded Font ، لا يزال هذا الجزء مطلوبًا بواسطة UWP.

لقد وجدت هذا كما في Xamarin Codebase لمعرض التحكم ، حيث كان XAML يحتوي على هذا السطر لصفحة EmbeddedFonts:

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

لاحظ #PTMono-Regular هناك في نهاية اسم الخط!

لذلك أضفت #Material Design Icons إلى نهاية اسم الخط الخاص بي كما يلي:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

ويا Presto يعمل ، لقد راجعت وهو يعمل على UWP / Droid و iOS لأن هذا كل ما أحتاجه لمشروعي الحالي.

إذا كنت تريد معرفة الجزء الذي يأتي بعد # فهو اسم الخط الموجود داخل Font File وأسهل طريقة للحصول عليه هي (على Win10 على أي حال!) فتح ملف الخط ويوجد في الجزء العلوي الاسم:

image

آمل أن يساعدك هذا وأعتقد أنه يغلق هذه المشكلة samhoutsjsuarezruiz لأنه لا يوجد أي شيء لإصلاحه باستثناء المستندات.

أعتقد أن XF يجب أن يحصل على اسم الخط الأول من الملف إذا لم يحدده المستخدم

نعم! لدي هذا في app.xaml وكانت الخطوط تعمل معي:
<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 لكن هل تستخدم EmbeddedFonts الجديد؟

VladislavAntonyuk ربما تحتاج إلى النظر في ذلك الوقت. لم أجربها مع إصدار أقدم من XF ، لذا لست متأكدًا مما إذا كانت تعمل على UWP أم أنها مشكلة جديدة ، فقد سلط مشروعي الحالي الضوء عليها. يسعدني إلقاء نظرة إذا كانت هذه هي الطريقة التي تعتقد أنها يجب أن تعمل.

آسف - لقد تحدثت في وقت قريب جدا. الخط الذي أستخدمه كخط مضمن هو الخط الذي أنشأته ويسمى karenfont. لدي مشكلة معاكسة مثل أي شخص آخر: إنه يعمل على UWP ولكن ليس على Android. أستخدم XF 4.6.0.726 و Windows 10 1903 على Surface Pro 7 و Android 10 على Samsung Galaxy s10
<Button x:Name="btnBackup" Text="b" HorizontalOptions="FillAndExpand" FontSize="Medium" FontFamily="karenfont"/>

في نظام التشغيل Windows ، يبدو الحرف "b" كما يلي:
b on windows

يبدو الحرف "b" على نظام التشغيل Android كما يلي:
b on android

كيف يبدو الخط:
karenfont

حسنًا ، أعتقد أنني وجدت ما يحدث هنا ولا يحتاج إلى علاقات عامة.

بالنسبة إلى UWP ، كانت الطريقة القديمة للقيام بذلك هي أنك أضفت FontPack مع OnPlatform إلى ResourcesDictionary وبدا الأمر كالتالي:

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

لاحظ أنه بالنسبة لنظامي Android و UWP ، يوجد #Material Design Icons لكي يعمل مع Embedded Font ، لا يزال هذا الجزء مطلوبًا بواسطة UWP.

لقد وجدت هذا كما في Xamarin Codebase لمعرض التحكم ، حيث كان XAML يحتوي على هذا السطر لصفحة EmbeddedFonts:

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

لاحظ #PTMono-Regular هناك في نهاية اسم الخط!

لذلك أضفت #Material Design Icons إلى نهاية اسم الخط الخاص بي كما يلي:

FontFamily="materialdesignicons-webfont#MaterialDesignIcons"

ويا Presto يعمل ، لقد راجعت وهو يعمل على UWP / Droid و iOS لأن هذا كل ما أحتاجه لمشروعي الحالي.

إذا كنت تريد معرفة الجزء الذي يأتي بعد # فهو اسم الخط الموجود داخل Font File وأسهل طريقة للحصول عليه هي (على Win10 على أي حال!) فتح ملف الخط ويوجد في الجزء العلوي الاسم:

image

آمل أن يساعدك هذا وأعتقد أنه يغلق هذه المشكلة samhoutsjsuarezruiz لأنه لا يوجد أي شيء لإصلاحه باستثناء المستندات.

مرحبا،
هل تحصل على هذا العمل في نموذج المشروع؟ https://github.com/jfversluis/EmbeddedFontsSample
حاولت ولكن دون جدوى.

يبدو أن إضافة #fontname لم تفعل أي شيء من أجلي. اعتقدت أنه يعمل في البداية ، لكنني بعد أن قمت بإلغاء تثبيت الخط من النظام ، عاد إلى عرض المربعات. لقد أكدت مع زميل آخر في العمل أنه إذا قمت بتثبيت الخط ، فسيبدأ في العرض بشكل صحيح.

لقد أجريت المزيد من البحث وهذا له علاقة بملف الخط. يمكنني التبديل إلى خطوط مختلفة وستعمل الأشياء بشكل جيد. سأحاول إعادة تصدير الخط الخاص بنا ومعرفة ما إذا كان بإمكاني الحصول على أي شيء يعمل.

نعم أوافق ، إنه لا يعمل على UWP. لا تقم بإضافة #FontName كما هو مقترح من CliffAgius ، إلا إذا قمت بتثبيت ملف الخط يدويًا في نظام التشغيل ، Windows 10. لذلك لا ، هذا ليس إصلاحًا. :) ويحتاج إلى معالجة من قبلsamhouts فريقjsuarezruiz فضلك.

نموذج المشروع الذي يظهر في مدونة إصدار Xamarin نفسه لا يعمل مع UWP ، https://github.com/jfversluis/EmbeddedFontsSample
https://devblogs.microsoft.com/xamarin/embedded-fonts-xamarin-forms/

image

يبدو أنهم يتجاهلون عمدًا دعم نظام التشغيل Windows 10 ، كلما دفعوا بميزة جديدة في Xamarin. الأشكال هذه الأيام! :(

UdaraAlwis ، شكرًا على النشر لأنني نسيت تمامًا هذا الأمر ، لقد نجح الإصلاح حيث تم تحميل FotPack على جهاز dev لشيء آخر لذلك اعتقدت أنه يعمل. بمجرد أن دفعت إلى العميل لإجراء معاينة ، تعطل. لقد اضطررت إلى العودة إلى الطريقة القديمة الطويلة لإضافة الخطوط لهذا المشروع لأنه يستهدف UWP لبعض المستخدمين.

لا أوافق على أن الفريق يتجاهل UWP في البنيات ، إنه فقط أن اختبارات واجهة المستخدم ليست مكتوبة لاختيار هذا وأن الكثير من المطورين يستخدمون أجهزة Mac ، لذلك لا يمكنهم اختبار UWP. يجب أن تكون هناك طريقة أفضل للقيام بذلك ، ربما يكون أسلوب #HotRestart للنوافذ عند البناء على جهاز Mac.

فقط أضيف تصويتي.
يعمل ExportFont فقط على UWP إذا كان الخط مثبتًا بالفعل على جهاز Windows. لذلك لن يعمل على جهاز العميل عند تثبيت التطبيق.

في الوقت الحالي ، كان عليّ وضع الخطوط في مجلد وتعيين الإجراء كمحتويات والإشارة إليه بعلامة #

/fonts/xyx.ttf#xyz.ttf

تمكنت من عرض الخطوط بشكل صحيح عندما تكون في وضع التصحيح أو عند إيقاف تشغيل "التحويل البرمجي باستخدام سلسلة الأدوات الأصلية .net".
سيؤدي إعادة تشغيل التحويل البرمجي الأصلي .net إلى كسر جميع الخطوط على الفور.

أنا جديد على Xamarin ، لذلك قد يكون هذا الحل مضللًا. لقد استخدمت النهج الذي أوضحه CliffAgius مرة أخرى ، ربما أستخدم الطريقة القديمة أو الخطأ تمامًا.

بالنسبة لي ، لا يتعين علي تثبيت أي خط . الطريقة الوحيدة التي يعمل بها بالنسبة لي في النظام الأساسي الثلاثة هي استخدام ملفات ".otf" بدلاً من ملفات ".ttf" .

تعمل ملفات ".ttf" فقط مع عائلة خط النص ولكن الجرعة لا تعمل مع Glyph.
إلى جانب ذلك ، لا بد لي من إضافة ".otf" إلى مجلد خاص بالنظام الأساسي.

فيما يلي ملف الاستخدام والموارد.

لم يتم اختبار الكود أدناه لنظام IOS.

ملف المورد:

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

وفي 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 ، لدي خط ttf يعمل باستخدام embedded / ExportFont على Android / iOS.

ومع ذلك ، فإن استكشاف الأخطاء وإصلاحها يعد نجاحًا أو فشلًا - لا توجد رسائل أو مقاييس لمساعدتك على فهم سبب عدم نجاحه. هذا شيء لا أحبه مع كود Xamarin ، في كثير من الحالات عندما تقوم بتمرير معلمة غير صحيحة ، فإن الوظيفة لا تفعل شيئًا بدلاً من إخبارك بأن قيمة المعلمة غير صحيحة. يمكن أن تكون رسائل الخطأ / التسجيل / الاستثناءات مفيدة حقًا.

Samit ، لدي خط ttf يعمل باستخدام embedded / ExportFont على Android / iOS.

ومع ذلك ، فإن استكشاف الأخطاء وإصلاحها يعد نجاحًا أو فشلًا - لا توجد رسائل أو مقاييس لمساعدتك على فهم سبب عدم نجاحه. هذا شيء لا أحبه مع كود Xamarin ، في كثير من الحالات عندما تقوم بتمرير معلمة غير صحيحة ، فإن الوظيفة لا تفعل شيئًا بدلاً من إخبارك بأن قيمة المعلمة غير صحيحة. يمكن أن تكون رسائل الخطأ / التسجيل / الاستثناءات مفيدة حقًا.

مرحبا كريس،

نعم ، لقد لاحظت نفس السلوك وكان من الصعب فهم أو تصحيح الخطأ ، يعمل ملف ".ttf" لنظامي التشغيل android و IOS ولكن ليس مع UWP (Glyph).
لذلك حاولت استخدام ملف .otf وهو يعمل مع جميع الأنظمة الأساسية الثلاثة للصورة (Glyph).

الشيء الغريب أيضًا أن ".ttf" يعمل في جميع الأنظمة الأساسية الثلاثة لخط النص (لست متأكدًا من كيفية الشرح ولكن ملف Roboto-Italic.ttf سيعمل على جميع الأنظمة الأساسية الثلاثة) ولكن كما قلت قبل Glyph من ملف .ttf ليس كذلك العمل.

نأمل أن يكون لدينا إصلاح لهذا قريبًا.

Samit.
أعتقد أن شفرتك تشير إلى الطريقة "القديمة" لدعم الخطوط المخصصة في Xamarin. في هذا السيناريو ، تقوم بتثبيت ملف الخط الخاص بك في كل مجلد مشروع وإضافة بعض التعليمات البرمجية الواضحة ، ثم الرجوع إلى اسم الخط كما تقدم في مثال ملف المورد الخاص بك حيث تحصل كل منصة على اختلاف بسيط في اسم الملف.
المشكلة التي تم الإبلاغ عنها هنا مع ميزة "ExportFont" التي تم تقديمها مؤخرًا مع Xamarin وتسمح لك بتضمين الخط مرة واحدة في المشروع المشترك ثم جعله معروفًا للتطبيق من خلال توجيه ExportFont.
[التجميع: ExportFont ("Samantha.ttf"، الاسم المستعار = "MyAwesomeCustomFont")]

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

ذكرت الخطأ أن هذا يعمل مع مشاريع Android و iOS ولكن ليس مع UWP حيث نحتاج إلى العودة إلى الطريقة السابقة.

تواجه نفس المشكلة هنا. كنا نستخدم ميزة دمج الخطوط التي تعمل بسهولة على Android و iOS. وقمنا بإضافة مشروع UWP إضافي بسبب بعض متطلبات العميل. إنه لا يعمل على الإطلاق وكل ما نراه هو بعض الصناديق.

Samit ، لدي خط ttf يعمل باستخدام embedded / ExportFont على Android / iOS.
ومع ذلك ، فإن استكشاف الأخطاء وإصلاحها يعد نجاحًا أو فشلًا - لا توجد رسائل أو مقاييس لمساعدتك على فهم سبب عدم نجاحه. هذا شيء لا أحبه مع كود Xamarin ، في كثير من الحالات عندما تقوم بتمرير معلمة غير صحيحة ، فإن الوظيفة لا تفعل شيئًا بدلاً من إخبارك بأن قيمة المعلمة غير صحيحة. يمكن أن تكون رسائل الخطأ / التسجيل / الاستثناءات مفيدة حقًا.

مرحبا كريس،

نعم ، لقد لاحظت نفس السلوك وكان من الصعب فهم أو تصحيح الخطأ ، يعمل ملف ".ttf" لنظامي التشغيل android و IOS ولكن ليس مع UWP (Glyph).
لذلك حاولت استخدام ملف .otf وهو يعمل مع جميع الأنظمة الأساسية الثلاثة للصورة (Glyph).

الشيء الغريب أيضًا أن ".ttf" يعمل في جميع الأنظمة الأساسية الثلاثة لخط النص (لست متأكدًا من كيفية الشرح ولكن ملف Roboto-Italic.ttf سيعمل على جميع الأنظمة الأساسية الثلاثة) ولكن كما قلت قبل Glyph من ملف .ttf ليس كذلك العمل.

نأمل أن يكون لدينا إصلاح لهذا قريبًا.

قد ترغب في التحقق من أن السبب في أن "Roboto-Italic.ttf" يعمل على جميع الأنظمة الأساسية الثلاثة هو أنه مثبت فعليًا على جهاز Windows الذي تستخدمه للاختبار.
لقد استغرق الأمر وقتًا طويلاً لمعرفة سبب عمل بعض الخطوط ، مع ExportFont ، على UWP ، بينما لم يعمل البعض الآخر حتى أدركت أنها كانت تستخدم فقط الخطوط المثبتة بالفعل في Windows.

تكمن المشكلة في أن UWP يريد اسم الخط كجزء من اسم عائلة الخط. تفترض Xamarin Forms خطأ أن اسم الخط هو نفس اسم ملف الخط. للعديد من الخطوط التي لا تعمل (FontAwesome على سبيل المثال)

سأقوم بإنشاء علاقات عامة لإصلاح هذه المشكلة.

زامارين. الأشكال: 4.8.0.1269
يعمل ExportFont لنظام Android ، ولكن ليس UWP

بدلاً من استخدام ExportFont في المشروع المشترك ، إليك الحل:

  1. انسخ ملف الخط (xxx.ttf) إلى مجلد الأصول في مشروع Androind و UWP:

[ذكري المظهر]:
الأصول / xxx.ttf
بناء العمل: AndroidAsset
نسخ إلى دليل الإخراج: لا تنسخ

[UWP]:
الأصول / xxx.ttf
بناء العمل: المحتوى
نسخ إلى دليل الإخراج: لا تنسخ

  1. يضبط خاصية FontFamily للنص الخاص بك:

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

الآن يعمل كما هو متوقع!

@ johncao158 هذه هي الطريقة القديمة لاستخدام الخطوط المخصصة في نماذج Xamarin ، والتي تعمل منذ البداية. هذه المشكلة على وجه التحديد حول [ExportFont] لا تعمل على UWP. لا يزال الحل البديل الذي اقترحته لا يسمح لك بإضافة الخطوط كمورد مضمن.

يعمل مشروعي بهذه الطريقة:

[مشروع مشترك]
AssemblyInfo.cs
[التجميع: ExportFont ("entypo.ttf"، الاسم المستعار = "entypo-plus")]
Fonts / entypo.ttf "لنظامي التشغيل iOS و Android"

بناء العمل: المحتوى
نسخ إلى دليل الإخراج: لا تنسخ

يعمل مشروعي بهذه الطريقة:

[مشروع مشترك]
AssemblyInfo.cs
[التجميع: ExportFont ("entypo.ttf"، الاسم المستعار = "entypo-plus")]
Fonts / entypo.ttf "لنظامي التشغيل iOS و Android"

بناء العمل: المحتوى
نسخ إلى دليل الإخراج: لا تنسخ

انت على حق. تعمل هذه الميزة الجديدة على iOS و Android.
المشكلة هي أنه لن يعمل على Windows ما لم يكن الخط مثبتًا بالفعل على الجهاز.

لماذا تم إغلاق هذا؟ على الرغم من أن الخطوط المخصصة تعمل في تصحيح أخطاء UWP ، إلا أنها لا تعمل في نسخة الإصدار.

عندما أستخدمها في إصدار التحميل الجانبي ، تكون الصفحة التي يعمل بها الخط المخصص فارغة تمامًا. عندما أعلق على عائلة الخطوط في xaml ، تظهر الصفحة بشكل جيد ... لكن بدون خطوط مخصصة ، بالطبع.

لقد تحققت أيضًا من مجلد windows / font وكان الخط

لدي نفس المشكلة مثل @ BillyMartin1964 في إصدار

لدينا نفس المشكلة مثل @ BillyMartin1964 - لقد كانت مربكة للغاية لأن الخطوط تعمل بشكل جيد على Android / iOS وحتى UWP في وضع التصحيح ، ولكن ليس في وضع الإصدار.

samhouts ، هل هناك حل

على أقل تقدير ، هل يمكننا الحصول على رمز يتجاهل الخط المخصص إذا لم يكن مثبتًا في كمبيوتر المستخدم / XBox؟

على أقل تقدير ، هل يمكننا الحصول على رمز يتجاهل الخط المخصص إذا لم يكن مثبتًا في كمبيوتر المستخدم / XBox؟

أعتقد أنه يمكنك إضافة عنصرين على الصفحة وجعلهما مرئيين اعتمادًا على النظام الأساسي الذي يعملان عليه. استخدم OnPlatform لذلك.

ArtjomP ، هذه ليست المشكلة. تكون الصفحة بأكملها فارغة عندما نستخدم الخط المضمن في التحميل الجانبي لبناء إصدار إلى كمبيوتر آخر. قال أحدهم إن السبب هو عدم تثبيت الخط مسبقًا على جهاز الكمبيوتر الآخر. لست متأكدًا من ذلك ، ولكن إذا كان الأمر كذلك ، فنحن بحاجة إلى اختبار الخط المثبت وعدم استخدامه إذا لم يكن مثبتًا.

أنا شخصياً أعتقد أنها مشكلة أخرى لأنه يبدو أن الخط كان في مجلد الخط على جهاز المستخدم.

@ BillyMartin1964 من الغريب أن كل صفحاتي تعمل جيدًا على إصدار UWP. الملصقات ذات الخط المخصص تظهر فقط بشكل مربع كما في الصورة أعلاه من jsuarezruiz

ArtjomP ، هل تقوم بالتثبيت على جهاز آخر؟

@ BillyMartin1964 متأكد من أنني أقوم بتطوير التطبيقات على جهازي ، CI مع اختبار واجهة المستخدم على جهاز آخر ويستخدم المستخدمون تطبيقاتي من المتجر على أجهزة الكمبيوتر وأجهزة Xbox

ArtjomP ، لا يمكنني إخبارك عن المتجر لأنني أخشى استخدامه في تطبيق الإنتاج. أستطيع أن أخبرك ، الفرق الوحيد بين أن تكون الصفحة بيضاء فارغة أم لا هو إزالة سمة FontFamily. يبدو أن المربع هو رمز له.

@ BillyMartin1964 ، يمكنك محاولة إزالة مجلدات obj & bin وإعادة بناء مشروعك مع تضمين سمة FontFamily. يساعد على التخلص من الأخطاء الغامضة في بعض الأحيان.

لماذا تم إغلاق هذا؟ على الرغم من أن الخطوط المخصصة تعمل في تصحيح أخطاء UWP ، إلا أنها لا تعمل في نسخة الإصدار.

عندما أستخدمها في إصدار التحميل الجانبي ، تكون الصفحة التي يعمل بها الخط المخصص فارغة تمامًا. عندما أعلق على عائلة الخطوط في xaml ، تظهر الصفحة بشكل جيد ... لكن بدون خطوط مخصصة ، بالطبع.

لقد تحققت أيضًا من مجلد windows / font وكان الخط

يوجد اصدار جديد لهذا: # 12404

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات