在Xamarin.Android中检索.ttf文件的路径

时间:2018-07-18 11:59:56

标签: c# android fonts xamarin.android sdl

我想做什么

我需要访问 consola.ttf 文件,该文件包含在 Assets 文件夹中,作为文件

Location of Font File

我做了什么

方法1:

尝试使用以下代码作为流访问文件:

        AssetManager assets = MainActivity.Context.Assets;
        using (var stream = assets.Open("Fonts/consola.ttf"))
        {
            font = new SdlFont(ToBytes(stream), 15);
        }

上面使用的ToBytes方法

static byte[] ToBytes(Stream stream)
        {
            byte[] b;
            using (var ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                ms.Flush();
                ms.Position=0;
                b = ms.ToArray();
            }
            return b;
        }
我发现here

是不可能的,因为我正在使用“ SDL_ttf”库,该库显然不直接喜欢字节流。

我的SDLFont包装器方法

public SdlFont(byte[] data, int fontSize)
        {
            Handle = OpenFontRW(OS.RWFromMemory(data, data.Length), 1, fontSize);
        }

使用SDLfont方法通过我的包装器调用TTF的此功能:

[DllImport(libTTF, EntryPoint = "TTF_OpenFontRW", CallingConvention = CallingConvention.Cdecl)]
        static extern IntPtr OpenFontRW(IntPtr src, int freesrc, int ptsize);

此TTF方法记录在here中。使用此方法只会引发未处理的异常并使应用程序崩溃。

方法2:

尝试在运行时中获取路径:

            var fontname = "consola.ttf";
            var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts);
            var fontpath = System.IO.Path.Combine(path,fontname);
            font = new SdlFont( fontpath , 15);

以下是它们在运行时的值:

Path in runtime

这也不起作用。

一个替代解决方案是从系统本身访问我不包含的任何字体文件(.ttf)。但是,能够使用我自己的字体将是更好的选择。

如果有人知道我如何在Android中访问System字体的路径,那对我也将有用。

谢谢。

0 个答案:

没有答案