- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否可以使用 C#、C++/CLI 或通过 P/调用 WinAPI 来确定某个字体系列是否为 TrueType 字体?
最后我想要这样的结果
bool result1 = CheckIfIsTrueType(new FontFamily("Consolas")); //returns true
bool result2 = CheckIfIsTrueType(new FontFamily("Arial")); // returns true
bool result3 = CheckIfIsTrueType(new FontFamily("PseudoSaudi")); // returns false
bool result4 = CheckIfIsTrueType(new FontFamily("Ubuntu")); // returns true
bool result5 = CheckIfIsTrueType(new FontFamily("Purista")); // returns false
当然,结果取决于目标操作系统及其字体...
最佳答案
它有处理异常的开销,但是 FontFamily
constructor如果提供的字体不是 TrueType,则抛出 ArgumentException
:
public bool CheckIfIsTrueType(string font)
{
try
{
var ff = new FontFamily(font)
}
catch(ArgumentException ae)
{
// this is also thrown if a font is not found
if(ae.Message.Contains("TrueType"))
return false;
throw;
}
return true;
}
深入研究 FontFamily 构造函数,它调用外部 GDIPlus 函数 GdipCreateFontFamilyFromName
:
[DllImport("Gdiplus", SetLastError=true, ExactSpelling=true, CharSet=System.Runtime.InteropServices.CharSet.Unicode)] // 3 = Unicode
internal static extern int GdipCreateFontFamilyFromName(string name, HandleRef fontCollection, out IntPtr FontFamily);
如果字体不是真正的字体,则返回代码 16
。所以你可以绕过异常的开销:
public bool CheckIfIsTrueType(string name)
{
IntPtr fontfamily = IntPtr.Zero;
IntPtr nativeFontCollection = IntPtr.Zero ;
int status = GdipCreateFontFamilyFromName(name, new HandleRef(null, nativeFontCollection), out fontfamily);
if(status != 0)
if(status == 16) // not true type font)
return false;
else
throw new ArgumentException("GDI Error occurred creating Font");
return true;
}
显然,您可能想为代码使用常量枚举,可以在here 中找到。 , 并抛出更好的异常
关于c# - 检查 FontFamily 是否为 TrueType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528726/
我正在创建一个 WPF 应用程序,我需要在其中使用自定义字体。 A 创建了一个字体资源库,如此处所述 http://msdn.microsoft.com/en-us/library/ms753303.
我的目标是通过 DependencyProperties 操作应用程序的文本样式。我得到了一个图表,其中要对文本的大小、字体系列、颜色等进行操作。因此我想使用类似于 Word 等富文本编辑器的界面。
在为我的应用程序使用字体时,当找不到我在样式中设置的 FontFamily 时,我没有收到任何警告/错误/异常。 通常在 WPF 中,您会在输出窗口中收到一条警告消息,告诉您要绑定(bind)的内容不
我希望每 1 秒后连续更改段落的字体系列。这是我的非工作代码... $(document).ready(function() { var idee = document.getEl
我希望应用程序中的每个文本都是 sans-serif-thin但我不知道如何改变它。我可以添加 android:fontFamily="sans-serif-thin"到 TextView它工作得很好
我注意到当我们尝试使用 C# 列出字体时,它工作正常;但是,如果我们要在应用程序运行时安装新字体,调用字体枚举不会返回新字体,直到应用程序重新启动。 代码如下: public void Populat
好吧,我基本上想直接嵌入我将在我的 WPF 应用程序中使用的字体集合。它们存储在我自己的虚拟文件系统(如 WinRAR)中,我只想通过字节数组或内存流加载它们。但是,我一直无法找到任何可行的解决方案。
我有来自同一个系列的多个 .ttf 文件,例如: MyFont.ttf MyFont_Bold.ttf MyFont_Light.ttf MyFont_Medium.ttf 如果我想使用每个权重,我应
我正在使用以这种方式定义的字体类型,android studio 的布局设计 View 以天气图标字体显示字符串/ TextView 。 但是,当我运行这段代码时: public cla
我正在移动我的项目 drop Calligraphy 并使用原生 android android 对字体的支持。但是,如果我使用 AppCompat 元素而不是默认元素(TextView、Button
我在做: testing 所有这些系列都使用@font-face 嵌入。虽然 Windows 和 Linux 上的 Chrome 会加载后备中提到的所有字体系列(通过控制台中的网络加载选项进行检查),
我正在开发一个文本字体游戏,用户可以猜测屏幕上显示的字体,但是当我尝试比较单击的文本的 style.familyFont 和相应的数组元素字体时,出现了问题。 经过一些测试,似乎只有当 style.f
我正在尝试创建一个允许用户选择字体系列的控件,然后从该字体系列中选择一个字符。下面是我要实现的目标的示例。 用字体系列列表填充组合框非常简单: FontFamilyCB.DisplayMember =
我想创建一个图片框,使其形状适应特定字体的字符串。我需要它以便稍后创建文本并将其放在 AxWindowsMediaPlayer 控件上。 因此我创建了以下类: using System; using
我正在使用 Android Studio 并且在我的主要 Activity 中有一个 SwitchCompat 小部件。它的默认字体系列是 sans-serif-medium,我将其更改为 quick
我正在使用 Gdi+ 绘制一些文本,我正在尝试确保我创建的字体确实存在。我注意到无论我指定什么字体,它都能正常工作。我有以下代码: Font font(TEXT("SomeGibberishFOEIH
我需要为我的应用程序中的不同标签指定不同的 FontFamily。我需要使用默认字体(例如 Android 的 Roboto 和 iOS 的 Helvetica)及其修改(例如 Light、Mediu
有谁知道如何解决 AppCompat 主题的字体系列支持问题? 我在 Android 中使用了 AppCompat v7 库,它可以很好地处理 ActionBar 问题,但是下面提到的属性在 andr
在 res/font我已经定义了font-family像这样: 如何在 Jetpack Compose 中加载它并将其用作 FontFamily目的? 最佳答案 不幸的是,目前
我目前重构了我的应用程序以使用可下载字体,因此我没有任何字体 Assets 文件。我搜索了很多,我看到的唯一解决方案是将 FontFamily 设置在 CSS 文件中并将 src 指向 assets
我是一名优秀的程序员,十分优秀!