Delphi 10.2.2
现在提供了最小,完整,可验证的示例here 236k
我安装了Font Awesome,以将字体用于“箭头”等。我正在用#$ F359(箭头alt-circle-left)进行测试。
请注意,我已经在我的Android应用程序中使用了一种“怪异”字体(Showcard Gothic),一切都很好[请参见下面的注释<1>]。
我创建了一个非常简单的测试应用,可以在Windows上正常运行。在Android上,我获得了“普通”字符的新(Font Awesome)字体。但不是针对上述“特殊”对象。
在两种情况下,很明显,新字体 正在被读取并正确应用。在Windows中,我看到了预期的“特殊字符”。在Android中,我看到了[]“框”。
注意:
我正在使用(在此处进行测试,并在我的实际应用中)单元FMX.FontGlyphs.Android的“ hack”。被黑的版本在我的源文件夹中。它记录在https://firemonkeyblog.blogspot.com/2014/12/using-custom-fonts-in-android-delphi.html上,并且需要进行以下更改:
在实现部分,将System.IOUtils
添加到uses子句。
在过程TAndroidFontGlyphManager.LoadResource
中,添加局部变量FontFile: string;
最后,紧接之前:
Typeface := TJTypeface.JavaClass.create(FamilyName, TypefaceFlag);
添加:
FontFile := TPath.GetDocumentsPath + PathDelim + CurrentSettings.Family + '.ttf';
if FileExists(FontFile) then
Typeface := TJTypeface.JavaClass.createFromFile(StringToJString(FontFile))
else
我将实际的字体文件(Font Awesome 5 Brands-Regular-400.otf)复制到了源文件夹中,并将其重命名为“ fawes.ttf”。
为确保更改的扩展名不会引起我的问题,我将其更改回“ .otf”并在FMX.FontGlyphs.Android中进行了相关更改。没变化。
我已将此“ .ttf”文件添加到我的部署中。
最后,应用程序:
这是一种形式。两个标签。一键。
我为每个标签设置:AutoSize = True,StyledSettings = [],TextSettings.Font.Size = 32
我将2个标签的Position.X属性设置为相等,将Label1放置在Label2的正上方。
最后,事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
const
{$IFDEF MSWINDOWS}
FAMILY = 'Font Awesome 5 Free Solid';
{$ELSE}
FAMILY = 'fawes';
{$ENDIF}
begin
Label1.Text := 'az';
Label2.Text := 'az' + widechar($F359);
Label2.TextSettings.Font.Family := FAMILY;
end;
仅此而已。有什么想法吗?