“我的猜测是扩展方法 BindingInflate 没有使用我设置的 LayoutInflator.Factory。
你如何解决这个问题?”
一个好问题,在过去的 1.5 年里显然没有答案!
这是解决方案...
在您的标记中,添加一个字体绑定,如下所示:
<TextView
android:id="@+id/welcome_title"
style="@style/WelcomeTitle"
local:MvxBind="Text myBoundText; Typeface StringToFont('Roboto-Thin')" />
包括您的 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 源代码即可引入此类功能的方法。