1、前言

在14年的时候写过一篇博客关于ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题,但是当时并没有很好的解决这样一个问题,也并没有深入研究分析这样的一个异常的产生原因,或者中文标注乱码、不显示、异常显示是什么原因造成的。而是使用了一种折中的解决方案:对于要使用TextSymbol的情况,先将文本信息转化成为图片,然后利用PictureSymbol显示。这样虽然能够避免异常的产生,但是总觉得现有的解决方案并非正解。加上群里的朋友也刚好研究到了这一块,并提供了对应的解决方案,只要在显示文本信息时,设置字体即可。

核心代码如下所示:

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 原生系统)

于是换了个设备并作测试,然后奇迹的发现显示又是正常的。(三星GT-P7510,Android版本4.1.2 CM版)

转载请注明出处:http://www.cnblogs.com/gis-luq/p/4833361.html

2、问题产生原因

针对上面的问题是如何产生的呢?通过查阅资料我在网上看到以下这样一段话。

Android系统中一般中英文字体包,主要是DroidSansFallback.ttf(中文字体)、DroidSans.ttf(英文字体)、 DroidSans-Bold.ttf(英文加粗字体)这三种,因为这三种字体是Andorid系统中几乎每一个显示界面都要使用到的字体,是默认的系统字体,所以只要你是Android手机,一般系统就内置有这三款字体。

但是估计也有例外,因为对于定制的Android系统有没有这个字体,这个字体是不是默认的就真的不好说了,比如MIUI。还有就是我们测试时候采用原生Android 5.01系统的Nexus4显示也是异常的,那这又是为什么?  这里我尝试打开Android Device Monitor工具并检查字体。

在Android Device Monitor工具下找到File Explorer,字体库的位置是在:/system/fonts文件夹下。

通过仔细检查,发现Android 5.01系统的Nexus4的字体库中并没有DroidSansFallback.ttf字体文件,然后我又用同样的方式查看了三星GT-P7510,Android版本4.1.2系统的字体库,在字体库里我们如期发现了DroidSansFallback.ttf字体,到这里也就能够解释,为什么在Nexus4中字体显示异常,在GT-P7510显示正常的原因。

网上有很多教大家替换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),最后终于是成功了。结果如下图:

3、问题处理方案

其实在剖析产生原因的时候已经介绍了处理方案,这里简单的再总结下。

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

4、参考资料

http://www.68idc.cn/help/buildlang/ask/20150102153583.html

http://www.zhihu.com/question/26202765

http://jingyan.baidu.com/article/8275fc86b80c6d46a03cf6f9.html

http://my.oschina.net/ryanhoo/blog/260945?p=1

文章若无特殊说明均为原创,原创作品,允许转载,转载时请务必以超链接形式标明文章出处、作者信息和本声明。
博客:http://www.cnblogs.com/gis-luq​ 作者:gis-luq 邮箱:luqiang.gis@foxmail.com

转载于:https://www.cnblogs.com/telwanggs/p/6434129.html

《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码...相关推荐

  1. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...

    1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据下载...

    1.前言 1.1.环境准备: ArcGIS for Desktop 10.4.1(10.2.1以上版本即可) ArcGIS for Server 10.4.1 (10.2.1以上版本即可) Postg ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>--(1).And ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView

    1.前言 在上一篇内容里介绍了 关于ArcGIS Android开发的未来("Quartz"版Beta)相关内容,期间也提到了关于API接口的重构,开发思路的调整,根据2015UC ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  10. 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境...

    1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...

最新文章

  1. 解决DexOverflowException: Cannot fit requested classes in the main-dex file
  2. CheckFail设计很垃圾
  3. java中表示根号三_Java命名规范
  4. 辽宁省风力发电行业“十四五”前景规划及竞争策略分析报告2022-2028年版
  5. Velocity模板基本常用语法
  6. 常用词句或缩略语汇总
  7. 【Configuration is still incorrect. Do you want to edit it again?】
  8. oracle执行cmd的实现方法
  9. 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
  10. win10系统 没有wifi图标 WiFi列表没有显示
  11. 2022年建筑设计中效果图渲染常见的7个错误
  12. Comparator--比较器
  13. 基于SQLSERVER--数据库表的修复
  14. @vue3 element-plus 按需引入,默认英文组件修改为中文
  15. 【基础】小青蛙回来了
  16. 全局优化的改进鸡群算法-附代码
  17. 线性代数 ----- 行列式的性质
  18. SCI论文类型及写作结构分析
  19. 区块链改革(链改)行动第二次联席会议在京召开
  20. 计算机 usb记录 深度,隐私信息自检查工具-EvidenceToolkit

热门文章

  1. go json的key为数字怎么解析_golang向interface{}解析json时把所有的数字都当成float64...
  2. java concurrent 框架_Java Concurrent 框架图
  3. 7004.vue脚手架快速生成项目
  4. mysql 加减乘除取小数点_mysql加减乘除
  5. 数据结构之栈与递归的应用(汉诺塔递归解法)
  6. 集群的可扩展性及其分布式体系结构(3)--上
  7. s3c6410 ddr初始化
  8. 位置式PID与增量式PID区别浅析
  9. MySQL事务和索引
  10. 计算机2010ppt试题,2010年职称计算机:PowerPoint2000试题及答案