[译]在 Andriod/IOS 程序中使用自己的字体
原文链接:http://firemonkeyblog.blogspot.com/2014/12/using-custom-fonts-in-android-delphi.html
你应该能够在 Andriod 应用中使用任何 TrueType 字体。
示例使用了字符 Script MT Bold。这个字体在 Windows 的字体文件夹。这个字体的文件名为 SCRIPTBL.TTF。
1. 复制 SCRIPTBL.TTF 到你的工程目录。
2. 在发布(Deployment)窗口中,添加 SCRIPTBL.TTF 文件。设置它的远程目录(Remote Path)为 .\assets\internal\
设置远程名称(Remote Name)为 SCRIPTBL.ttf (使用小写的 ttf 扩展名是因为我们在程序中使用硬编码)
3. 在 IDE 编辑器中打开 FMX.FontGlyphs.Android.pas。(文件位于 C:\Program Files (x86)\Embarcadero\Studio\15.0\source\fmx)
如果它被标记为只读,在编辑器中右击关闭只读。
保存文件到工程目录。不要更改文件名。接下来你可以在编辑器中修改它。
A. 添加对 System.IOUtils to 的引用到 uses 部分。
B. 找到 procedure TAndroidFontGlyphManager.LoadResource;
- 添加一个变量 FontFile: string;
- 在过程中有一行是:Typeface := TJTypeface.JavaClass.create(FamilyName, TypefaceFlag);
- 将上面的行替换为:
1
2
3
4
5
|
FontFile := TPath.GetDocumentsPath + PathDelim + CurrentSettings.Family + '.ttf';
if FileExists(FontFile) then
Typeface := TJTypeface.JavaClass.createFromFile(StringToJString(FontFile))
else
Typeface := TJTypeface.JavaClass.Create(FamilyName, TypefaceFlag);
|
这将让其查找前面指定名称的字体文件。
4. 对于每一个想使用该字体的组件,设置 TextSettings 的字体家族(FontFamily)属性为 SCRIPTBL
这个名称是不包含扩展名的字体文件名称。不要设置为 “SCRIPTBL.ttf” 或 “Script MT Bold”。
你将不得不手动输入或粘贴它到属性编辑框。
注意: 在 Android 里文件名区分大小写,所以你必需保证他们一致。
这个窗体包括 label, textbox, memo, checkbox, radio button:
原作者还有一篇文章描述了如何在 iOS 中使用自己的 TTF 字体,和上面的差别在于:
1、在 IDE 的编辑器中打开 info.plist 文件,将它命名为 custom.info.plist 并保存到工程目录。
添加一个 key :
1
2
3
4
|
<key>UIAppFonts</key>
<array>
<string>SCRIPTBL.TTF</string>
</array>
|
这将告诉 IOS 能够使用额外的字体文件。IOS将自动寻找它。
2、发布页中的远程目录设置为 “.\”
3、将第一步的custom.info.plist 文件加入到发布页中,并重命名为 info.plist,然后去掉原来的 info.plist 的选择。
4、中文字体要使用它的默认名称,也就是英文名称,不能使用中文名称。
其它的就一样了。
[译]在 Andriod/IOS 程序中使用自己的字体的更多相关文章
- 在 Andriod/IOS 程序中使用自定义字体
很早就遇到这个问题,QDAC作者也在这里给出了方案.
- iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )
在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:
- ios程序中存储的回忆
可编程序中的存储区域基本上分为:静态存储区,栈区,堆区,代码区. 1.静态存储区(全局存储区):该块内存在程序编译期间就已经分配好,并且在程序运行期间都一直存在,主要用于存储静态数据,全局数据和常量. ...
- iOS程序中的内存分配 栈区堆区全局区
在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对 ...
- 以iphone作为热点时ios程序中的UDP广播地址
iPhone 开启热点后,会启用一个 172.20.10.0/28 的子网, 也就是最多15个ip地址,自己的地址是172.20.10.1, 广播地址是 172.20.10.15 ,不是传统的255. ...
- 在ios程序中自己主动滚动TableView到某行的方法
比方tableview窗体能够显示 30 行, 我想在填充tableview 100 条数据后 选择第 50行, 能把这一行显示到窗体内, 就像手动拖滚动栏到 第 50行一样,要怎样实现呢? ] an ...
- 关于小程序中textarea内的字体浮动问题
因为map.canvas.video.textarea 是由客户端创建的原生组件,原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上. 原生组件暂时还无 ...
- 在MacOS和iOS系统中使用OpenCV
在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV ...
- CocoaPods:管理Objective-c 程序中各种第三方开源库关联
在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...
随机推荐
- java.lang.NullPointerException - 如何处理空指针异常
当应用程序试图null在需要对象的情况下使用时抛出.这些包括: 调用null对象的实例方法. 访问或修改null对象的字段. 把长度null当作一个数组. 像访问或修改null阵列一样访问或修改插槽. ...
- IDEA 码云 安装
安装方式: 从IDEA插件仓库搜索Gitee下载并安装即可. 登陆并拉取项目代码 1. 启动 idea,选择Check out from Version Control-码云 2. 输入用户名和密码, ...
- distinct top執行順序
select distinct top 3 from table; 先distinct后top
- iperf——网络性能测试工具
一.前言 工作中遇到需要测试Linux服务器网卡占用率的场景,查阅资料后,发现iperf是一款合适的网络测速工具. 下面讲解一下如何使用iperf做网络性能测试. 二.基础知识 先补充一些基础知识: ...
- 使用ecstore-sdk开发包制作易开店和启明星模板
前言: 尽管商派官网有模板开发教程,但是诸多方面太过笼统.我等平庸之辈,纵使细心研读,潜心修炼,亦未能品味练功境界,领悟其中真谛. 商派有云,此九阳真经不用您挥刀****本人却感觉此教程令人抓狂,无人 ...
- AndroidStudio 导包遇到so文件的解决方案----------JPush推送
最近遇到 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 这样一个问题 它说的是AS不能找到库文件 发生在于像Ecli ...
- Linux下Google Test (GTest)测试环境搭建步骤
1.下载GTEST 下载链接为:https://code.google.com/p/googletest/downloads/list 目前GTEST的最新版本为gtest-1.7.0.zip,因此我 ...
- Django基础教程
实例练习1-提交数据并展示 1.app_01下的views.py info_list=[] def userInfor(req): if req.method=="POST": u ...
- Mysql的内存优化
老师 vi mysqld_safe# executing mysqld_safe 后面增加export LD_PRELOAD=/usr/local/lib/libtcmalloc.so 可以做一 ...
- Luogu 3953[NOIP2017] 逛公园 堆优化dijkstra + 记忆化搜索
题解 首先肯定是要求出单源最短路的,我用了堆优化dijikstra ,复杂度 mlogm,值得拥有!(只不过我在定义优先队列时把greater 打成了 less调了好久 然后我们就求出了$i$到源点的 ...