在14年的时候写过一篇博客关于ArcGIS for Android 10.1.1API 中文标注致使程序异常崩溃问题,可是当时并无很好的解决这样一个问题,也并无深刻研究分析这样的一个异常的产生缘由,或者中文标注乱码、不显示、异常显示是什么缘由形成的。而是使用了一种折中的解决方案:对于要使用TextSymbol的状况,先将文本信息转化成为图片,而后利用PictureSymbol显示。这样虽然可以避免异常的产生,可是总以为现有的解决方案并不是正解。加上群里的朋友也恰好研究到了这一块,并提供了对应的解决方案,只要在显示文本信息时,设置字体便可。html
核心代码以下所示:工具
TextSymbol ts = new TextSymbol(18, "中文标注显示测试,English Test", Color.RED);
ts.setFontFamily("DroidSansFallback.ttf");//设置字体
ts.setOffsetX(0);
ts.setOffsetY(-30);
Graphic gText = new Graphic(point,ts);
graphicsLayer.addGraphic(gText);
可是在笔者的机器上运行了一下就产生了以下的效果。(LG Nexus 4 ,Android版本5.0.1 原生系统)post
因而换了个设备并做测试,而后奇迹的发现显示又是正常的。(三星GT-P7510,Android版本4.1.2 CM版)测试
转载请注明出处:http://www.cnblogs.com/gis-luq/p/4833361.html字体
针对上面的问题是如何产生的呢?经过查阅资料我在网上看到如下这样一段话。ui
Android系统中通常中英文字体包,主要是DroidSansFallback.ttf(中文字体)、DroidSans.ttf(英文字体)、 DroidSans-Bold.ttf(英文加粗字体)这三种,由于这三种字体是Andorid系统中几乎每个显示界面都要使用到的字体,是默认的系统字体,因此只要你是Android手机,通常系统就内置有这三款字体。this
可是估计也有例外,由于对于定制的Android系统有没有这个字体,这个字体是否是默认的就真的很差说了,好比MIUI。还有就是咱们测试时候采用原生Android 5.01系统的Nexus4显示也是异常的,那这又是为何? 这里我尝试打开Android Device Monitor工具并检查字体。url
在Android Device Monitor工具下找到File Explorer,字体库的位置是在:/system/fonts文件夹下。spa
经过仔细检查,发现Android 5.01系统的Nexus4的字体库中并无DroidSansFallback.ttf字体文件,而后我又用一样的方式查看了三星GT-P7510,Android版本4.1.2系统的字体库,在字体库里咱们如期发现了DroidSansFallback.ttf字体,到这里也就可以解释,为何在Nexus4中字体显示异常,在GT-P7510显示正常的缘由。.net
网上有不少教你们替换Android字体的文章,在这些文章里咱们发现这样一个问题:Android 5.0系统默认的简体中文字体替换为了NotoSansHans-Regular.otf,
经过上面的检查咱们也知道了Android 5.01的系统里没有
DroidSansFallback.ttf字体。我想这样就是问题的关键点所在了。
接下来咱们作进一步的测试,将字体替换为NotoSansHans-Regular.otf
。而后示例代码以下:
TextSymbol ts = new TextSymbol(18, "中文标注显示测试,English Test", Color.RED);
ts.setFontFamily("NotoSansHans-Regular.otf");
ts.setOffsetX(0);
ts.setOffsetY(-30);
Graphic gText = new Graphic(point,ts);
graphicsLayer.addGraphic(gText);
结果在Nexus4 上依旧中文显示乱码,有多是otf的字体文件就没有被识别到。
为了让字体显示正常。我又作了如下操做,先把Nexus4给Root了,而后将DroidSansFallback.ttf
字体文件拷贝到手机系统字体文件夹下(/system/fonts),最后终因而成功了。结果以下图:
其实在剖析产生缘由的时候已经介绍了处理方案,这里简单的再总结下。
1)、Android 5.0如下版本,检查手机字体库内是否包含DroidSansFallback.ttf
字体,若包含则在使用TextSymbol时设置使用的字体。(设置其余字体也是能够的,可是该字体要支持中文)
2)、Android 5.0以上版本,因为默认的otf格式字体不被识别,因此先将DroidSansFallback.ttf
字体文件拷贝到手机系统字体文件夹下,而后设置使用。(对于用到的手机每一个都Root并设置也不是很现实)
3)、对于网上提到的加载自定义本地字体解决方案,关键代码以下所示,其中字体类是Typeface,我并无在TextSymbol中找到对应的设置接口,因此这条路暂时也没有走通。欢迎你们拍砖补充。
Typeface customFont = Typeface.createFromAsset(this.getAssets(), "fonts/YourCustomFont.ttf"); TextView view = (TextView) findViewById(R.id.activity_main_header); view.setTypeface(customFont);
其余说明:ArcGIS Runtime SDK for Android 版本为10.2.6-u2
http://www.68idc.cn/help/buildlang/ask/20150102153583.html
http://www.zhihu.com/question/26202765
http://jingyan.baidu.com/article/8275fc86b80c6d46a03cf6f9.html