自定义中文字体解决方案
来源:互联网 发布:淘宝裤子好评语100字 编辑:程序博客网 时间:2024/06/06 00:00
There is no longer a limit on the size of compressed .apk assets that can be read.
从2.3开始,对可读取的压缩后的.apk中的资源的大小不再有限制。这意味着在2.3之前都是有限制的。翻看LogCat中的记录,会有如下的信息:
Data exceeds UNCOMPRESSE_DATA_MAX ( XXXXXXXXXX vs 1048576)
其中XXXXXXX是一个大于1048576的值。也就是说,在压缩打包到APK文件中的资源文件,在解压后的大小不能超过1MB。否则在Android 2.3之前的系统中就无法正确读取该资源文件。而我们用的中文字体文件的大小显然超过了1MB,失败的原因就在这里。怎么办?
中文社区中对此有这样的一篇广为转载的文章,《Asset限制文件大小UNCOMPRESS_DATA_MAX为1MB》,其中的结论是:
目前解决的方法只有将文件放入到sdcard,但这样除了microsd的读取IO效率和耗电量解决不是很好,同时sd卡移除时可能存在问题,解决的方法如果数据量大的化通过sqlite是一种解决方法,同时openFileOutput方式读取也是不错的选择,看来android操作系统中最安全控制的严格,但犯了一个不小的错误。
字体文件显然没办法塞到sqlite里面,要求所有的用户都有SD卡也不太友好。又翻到一篇相关的英文文章,Dealing with Asset Compression in Android Apps。从中可以看出,Android 2.3之前的版本只对压缩过的资源文件的原始大小做了限制,这种限制可能是出于计算性能的考虑。对于没有压缩的文件,是没有大小限制的。哪些文件不会压缩?图片、音频、视频,包括这些后缀:
“.jpg”, “.jpeg”, “.png”, “.gif”, “.wav”, “.mp2″, “.mp3″, “.ogg”, “.aac”, “.mpg”, “.mpeg”, “.mid”, “.midi”, “.smf”, “.jet”, “.rtttl”, “.imy”, “.xmf”, “.mp4″, “.m4a”, “.m4v”, “.3gp”, “.3gpp”, “.3g2″, “.3gpp2″, “.amr”, “.awb”, “.wma”, “.wmv”
从Android的源代码中可以知道,Android的打包工具是通过文件的后缀名来判断文件是否需要压缩的。如果文件的后缀名是上面这些后缀,文件就不会被压缩,大小也就没有限制;如果文件的后缀不是上面这些,就对其进行压缩,并且在Android 2.2上有1MB的大小限制。字体文件后缀通常是.ttf,属于要被压缩的,在Android 2.2之前的版本中就有了体积限制。不过,看到这里,解决方案也出来了,把字体文件的.ttf后缀改成上述任意一个后缀,然后修改相应的代码就可以。好猥琐的解决方案啊~~
结论:中文社区的水平似乎还是跟老外有点差距,或者是高手的分享意愿不强烈;Android本身及其相关的开发工具的源代码是值得去读读的;Android里面有一些看似奇怪的条条框框,这种非API的版本变化,如果不在2.3以下的机器上测试是根本发现不了的。
-------------------------------------------------------
我做的实现:
Typeface face=Typeface.createFromAsset(getAssets(),"fonts/STXINGKA.jpg"); tv.setTypeface(face);
这里使用的是华文行楷,文件大小为:3.83MB
实现效果:
- 自定义中文字体解决方案
- SecureCRT中文字体解决方案
- ZenGl中文字体渲染解决方案。
- cocos2dx wp8 中文字体 解决方案
- Flex 中文字体终极解决方案
- centos 中文字体解决方案
- css中文字体乱码解决方案:
- Linux/centos中文字体解决方案
- iOS中文字体自定义
- Linux 中文字体终极解决方案之一
- iText生成pdf中文字体解决方案
- BMfont生成NGUI自定义中文字体
- jdk1.5linux中的中文字体解决方案
- Silverlight 2 Beta 2 中文字体完全解决方案
- Ctex CJK 中文字体颜色深浅解决方案
- Flash Builder 4.6中文字体过小解决方案
- Linux/centos 5.x 中文字体解决方案
- Eclipse中文字体太小的解决方案
- AjaxFileUploader 上传插件 兼容性好
- Spotify进军移动网络电台 Pandora坐立不安
- 简单Sqlite 查询
- ComponentArt.Web.UI
- Activity 生命周期
- 自定义中文字体解决方案
- android view的gone / visible / invisible 三种属性的区别
- 文件上传 带进度条(多种风格)
- ring0 APC插dll
- Qt+sqlite3
- DNS解析测试工具
- asp.net文件上传进度条控件(破解版~没时间限制)多项自定义
- 关闭Windows硬盘默认共享
- 用python写游戏