1

I'm trying to follow the example here, but use this with MvvmCross:

http://motzcod.es/post/62100709977/super-roboto-fonts-custom-layoutinflater-ifactory-in

Which shows how to use the Roboto font family (and other fonts) in older versions of Android OS in Xamarin apps.

My guess is that the extension method BindingInflate isn't using the LayoutInflator.Factory I'm setting. How do you fix this?

4

2 回答 2

1

我的猜测是扩展方法 BindingInflate 没有使用我设置的 LayoutInflator.Factory。 你如何解决这个问题?”

一个好问题,在过去的 1.5 年里显然没有答案!

这是解决方案...

  1. 在您的标记中,添加一个字体绑定,如下所示:

    <TextView android:id="@+id/welcome_title" style="@style/WelcomeTitle" local:MvxBind="Text myBoundText; Typeface StringToFont('Roboto-Thin')" />

  2. 包括您的 MvvmCross 字体转换器:

    public class StringToFontConverter : MvxValueConverter<string, Typeface>
    {
        private static readonly Dictionary<string, Typeface> Cache = new Dictionary<string, Typeface> ( );
    
        protected override Typeface Convert ( string fontName, Type targetType, object parameter, System.Globalization.CultureInfo culture )
        {
            try
            {
                if ( ! fontName.StartsWith ( @"Fonts/" ) ) fontName = @"Fonts/" + fontName;
                if ( ! fontName.EndsWith ( ".ttf" ) ) fontName += ".ttf";
    
                if ( ! Cache.ContainsKey ( fontName ) ) {
                Cache[fontName] = Typeface.CreateFromAsset ( Application.Context.Assets, fontName );
                }
    
                return Cache[fontName];
            }
            catch ( Exception e )
            {
                Android.Util.Log.Error ( "AndroidFont", e.ToString ( ) );
                return Typeface.Default;
            }
        }
    }
    

注意:我不是特别喜欢这个解决方案,因为它不会像“Calligraphy”这样的 Xamarin 组件那样注入默认字体。

不幸的是,我今天无法找到 MvvmCross“android 视图膨胀可扩展性”功能,但我正在研究无需分支 MvvmCross 源代码即可引入此类功能的方法。

于 2015-04-27T15:58:01.493 回答
0

MvvmCross 本身使用自定义LayoutInflator.Factory,并使用自定义属性进行绑定。正因为如此,将那篇文章中的技术与 MvvmCross 结合起来目前并不容易(我想不出一种简单的方法)。

然而:

于 2013-11-13T07:52:38.567 回答