internal static UIFont EmbeddedFont(string resourceId, nfloat size, Assembly assembly = null) { if (resourceId == "STIXGeneral") { resourceId = "Forms9Patch.Resources.Fonts.STIXGeneral.otf"; } lock (_loadFontLock) { if (_embeddedResourceFonts.ContainsKey(resourceId)) { string family = _embeddedResourceFonts[resourceId]; return(UIFont.FromName(family, size)); } if (EmbeddedResourceExtensions.FindAssemblyForResource(resourceId, assembly) is Assembly resourceAssembly && LoadAndRegisterEmbeddedFont(resourceId, size, resourceAssembly) is UIFont uIFont) { return(uIFont); } } return(null); }
/* * { * get * { * if (_serif != null) * return _serif; * _serif = TrySystemFont("serif"); * if (_serif != null) * return _serif; * _serif = TrySystemFont("Droid Serif"); * if (_serif != null) * return _serif; * return _serif; * } * } */ public static Typeface TypefaceForFontFamily(string fontFamilys, Assembly assembly = null) { if (string.IsNullOrWhiteSpace(fontFamilys)) { return(null); } var fontFamiliesList = fontFamilys.Split(','); if (fontFamiliesList != null && fontFamiliesList.Any()) { foreach (var fontFamilyString in fontFamiliesList) { var fontFamily = fontFamilyString?.Trim().Trim(';'); if (string.IsNullOrWhiteSpace(fontFamily)) { continue; } Typeface result; if (fontFamily.ToLower() == "monospace" && MonoSpace != null) { return(MonoSpace); } if (fontFamily.ToLower() == "serif" && Serif != null) { return(Serif); } if (fontFamily.ToLower() == "sans-serif" && DroidSans != null) { return(DroidSans); } result = TrySystemFont(fontFamily); if (result != null) { return(result); } if (DroidSans != null && (fontFamily.ToLower() == "arial" || fontFamily.ToLower() == "helvetica")) { return(DroidSans); } if (fontFamily.Contains(".Resources.")) { // it's an Embedded Resource if (!fontFamily.EndsWith(".ttf", StringComparison.OrdinalIgnoreCase) && !fontFamily.EndsWith(".otf", StringComparison.OrdinalIgnoreCase)) { throw new InvalidObjectException("Embedded Font file names must end with \".ttf\" or \".otf\"."); } // what is the assembly? /* * var assemblyName = fontFamily.Substring(0, fontFamily.IndexOf(".Resources.Fonts.")); * * //var assembly = System.Reflection.Assembly.Load (assemblyName); * var assembly = ReflectionExtensions.GetAssemblyByName(assemblyName) ?? Forms9Patch.Droid.Settings.ApplicationAssembly; * * if (assembly == null) * { * // try using the current application assembly instead (as is the case with Shared Applications) * assembly = ReflectionExtensions.GetAssemblyByName(assemblyName + ".Droid"); * ///System.Console.WriteLine ("Assembly for FontFamily \"" + fontFamily + "\" not found."); * //return null; * } */ // move it to the Application's CustomFontDirRoot if (EmbeddedResourceExtensions.FindAssemblyForResource(fontFamily, assembly) is Assembly asm) { return(LoadAndRegisterEmbeddedFont(fontFamily, asm)); } } } } return(null); }