2017-08-29 13 views
1

モバイルアプリケーションでアイコンを表示するためにフォントを使用しています。問題は、xamlファイルに直接書き込むとフォントアイコンが正しく表示されますが、実行時にフォントアイコンが設定されても機能しないことです。Xamarinフォーム:実行時にフォントアイコンがレンダリングされない

私は、各プラットフォーム用のカスタムラベルコントロールとカスタムレンダラーを作成してフォントアイコンを実装しました。私はAndroidでこの問題に直面していますが、まだiOSでチェックしていません。

カスタムラベル:Android用

using System; 
using Xamarin.Forms; 

namespace fonticon 
{ 
    public class IconLabel:Label 
    { 
     public IconLabel() 
     { 
     } 
    } 
} 

カスタムレンダラ:XAML後

using System; 
using Android.Graphics; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 

// This informs the compiler that we're using this class to render an IconLabel on this platform 
[assembly: ExportRenderer(typeof(fonticon.IconLabel), typeof(fonticon.Droid.IconLabelRenderer))] 
namespace fonticon.Droid 
{ 
    public class IconLabelRenderer:LabelRenderer 
    { 
     // sets the font for the platform-specific ui component to be our custom font 
     protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
     { 
      base.OnElementChanged(e); 
      // Note we're using the filename here, NOT the font family name 
      var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, "flatuiicons.ttf"); 
      Control.Typeface = font; 
     } 
    } 
} 

作品:

<?xml version="1.0" encoding="utf-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:fonticon" 
    x:Class="fonticon.fonticonPage"> 

    <StackLayout x:Name="mainContainer"> 
     <local:IconLabel x:Name="lblTestIcon" Text="&#xe012;" VerticalOptions="Center" HorizontalOptions="Center" FontSize="40" /> 
    </StackLayout> 

</ContentPage> 

は、コードは動作しません次:実装の

lblTestIcon.Text = "&#xe012;"; 

ソースは以下の通りです:

問題は、記事で何とか言われた次のコードを使用して固定されているhttps://blog.bitbull.com/2017/05/10/using-a-custom-icon-font-in-xamarin-forms/comment-page-1/#comment-1209

+0

あなたはあなたが投稿記事からステップ5をカバーしていますか?私はこの手順を数回忘れてしまい、フォントパックを見つけることができません。 ステップ5.あなたのAndroidプロジェクトにカスタムフォントをインポートしてください あなたのアセットディレクトリを右クリックしてAndroidプロジェクトを開き、[ファイルを追加]を選択します。ハードドライブで選択したフォントファイルに移動し、プロジェクトに追加します。ファイルが追加されたら、右クリックして 'Build Action'が 'AndroidAsset'に設定されていることを確認します。 –

+0

問題は、記事で言われた次のコードを使用して修正されましたが、何とか私はそれを逃しました。 Text = System.Net.WebUtility.HtmlDecode( "&#xe012;"); – dsakpal

答えて

0

見逃した。

また
Text = System.Net.WebUtility.HtmlDecode ("&#xe012;"); 

は、Androidのカスタムレンダラに次のコードを追加しました:

// sets the font for the platform-specific ui component to be our custom font 
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    base.OnElementPropertyChanged(sender, e); 

    // Note we're using the filename here, NOT the font family name 
    var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, "flatuiicons.ttf"); 
    Control.Typeface = font; 
} 
関連する問題