如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题
2015-10-11 20:45
721 查看
自10.2版本开始,我就一直被ArcGIS Runtime SDK for Android的中文标注无限困扰。无论是驻留于内存中的Graphic 的文本符号TextSymbol,还是新增的离线geodatabase中的中文标注,只要与中文扯上了干系,就无法显示。每次接到用户的电话,我就只能非常官方的仓促应对,文档中明确说明了这一限制啊,确实无能为力;建议您对标注层创建离线缓存吧;您的Android开发经验这么丰富,也可以自行绘制文本来实现;等等等等。其实,自己也觉得Esri的这种疏漏太对不起广大的中国用户了。
好在对于Graphic的中文TextSymbol的显示很快就找到了便捷的方法,也算是有了初步的交代。不多废话,直接奉上简单的代码片段吧。
是的,问题的关键在于字体的指定,即,调用setFontFamily()准确识别到正确的字体。大多数的Android设备上都会默认安装DroidSansFallback.ttf这一字体,拿来即可。
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203421628-1225308581.png)
Graphic的问题解决了,接下来呢,就该关注离线geodatabase的标注了,毕竟,这一格式是10.2.X的最大亮点,也是移动端应用所亟需的。毕竟,野外作业中能够顺利联网的可能性为零。千呼万唤终露面,可惜却还文绉绉的抱起了琵琶——中文标注呢?中文标注呢?
一个接一个的用户需求迫着我开始了新一轮的尝试。对于同一数据,为什么英文和数字都可以正常显示,而独独中文标注无法显示呢?首先,利用Firefox提供的SQLiteManager对要素Table进行查看,数据没问题;那么80%~90%就是字体设置的问题了。Android设备默认安装了DroidSansFallback.ttf这一可支持中文的字体,那么参照ArcGIS for Server对字体的解决办法,安装此字体并重启机器,创建mxd并选择这一字体,而后创建geodatabase。多次三番的折腾证明:完全无效啊,甚至连乱码都没有。着实无语。
9月份的时候,Esri Developer小组终于验证得出,对Portal for ArcGIS 托管的要素服务经过若干属性更新后下载得到的离线geodatabase是可以正确显示中文的。这一消息终于再次激发了我的斗志,那就找两者的差别呗。经过半天的不懈努力,真相揭露。
首先,利用SQLiteManager打开所创建的离线geodatabase。
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203442909-264255150.png)
其次,最关键的步骤就是找到列表中GDB_ServiceItems打开并双击查看
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203459081-1025061735.png)
很明显地,不管是ItemInfo还是DrawingInfo中的FontFamily都正确设置为Droid Sans Fallback。但是,这种情况下,中文标注仍然是无法显示的。您需要做的则是编辑ItemInfo字段,将其中的family修改为DroidSansFallback.ttf,如下:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203515956-1911317193.png)
再次加载这一修改后的geodatabase,中文标注终于出现了。
family修改前:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203534143-143975437.png)
family修改后:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203551440-1088897108.png)
是的,你没看错,就是这么傻。就相当于你听到张三的名字,完全不知道是谁,必须得见到本尊,才清楚,原来是他啊,我认识,我认识,呵呵,呵呵。。。。。
既然ArcMap创建的离线geodatabase可以正确显示中文标注了。那么类比的,对于由在线服务获取的离线geodatabase,只需要代码实现1)连接这一SQLite数据库,2)找到GDB_ServiceItem表的ItemInfo字段,3)修改这一属性值。具体实现就劳驾大家了。这一小章节就到此吧。
小报,小报:
根据Esri非官方渠道,明年3月份推出的Quarz版本将从根本上解决这一问题。小编再也不用为应用中的中文标注担心了。
好在对于Graphic的中文TextSymbol的显示很快就找到了便捷的方法,也算是有了初步的交代。不多废话,直接奉上简单的代码片段吧。
//创建点几何 Point tapPoint = mMapView.toMapPoint(x, y); //创建文本符号 String showLabel = "哈哈,中文标注图形点"; TextSymbol tapTextSymbol = new TextSymbol(28, showLabel, Color.BLUE); tapTextSymbol.setFontFamily("DroidSansFallback.ttf"); //传入点几何和文本符号以构建Graphic Graphic tapGraphic = new Graphic(tapPoint, tapTextSymbol); //将创建的Graphic添加到GraphicsLayer上 gLayer.addGraphic(tapGraphic);
是的,问题的关键在于字体的指定,即,调用setFontFamily()准确识别到正确的字体。大多数的Android设备上都会默认安装DroidSansFallback.ttf这一字体,拿来即可。
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203421628-1225308581.png)
Graphic的问题解决了,接下来呢,就该关注离线geodatabase的标注了,毕竟,这一格式是10.2.X的最大亮点,也是移动端应用所亟需的。毕竟,野外作业中能够顺利联网的可能性为零。千呼万唤终露面,可惜却还文绉绉的抱起了琵琶——中文标注呢?中文标注呢?
一个接一个的用户需求迫着我开始了新一轮的尝试。对于同一数据,为什么英文和数字都可以正常显示,而独独中文标注无法显示呢?首先,利用Firefox提供的SQLiteManager对要素Table进行查看,数据没问题;那么80%~90%就是字体设置的问题了。Android设备默认安装了DroidSansFallback.ttf这一可支持中文的字体,那么参照ArcGIS for Server对字体的解决办法,安装此字体并重启机器,创建mxd并选择这一字体,而后创建geodatabase。多次三番的折腾证明:完全无效啊,甚至连乱码都没有。着实无语。
9月份的时候,Esri Developer小组终于验证得出,对Portal for ArcGIS 托管的要素服务经过若干属性更新后下载得到的离线geodatabase是可以正确显示中文的。这一消息终于再次激发了我的斗志,那就找两者的差别呗。经过半天的不懈努力,真相揭露。
首先,利用SQLiteManager打开所创建的离线geodatabase。
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203442909-264255150.png)
其次,最关键的步骤就是找到列表中GDB_ServiceItems打开并双击查看
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203459081-1025061735.png)
很明显地,不管是ItemInfo还是DrawingInfo中的FontFamily都正确设置为Droid Sans Fallback。但是,这种情况下,中文标注仍然是无法显示的。您需要做的则是编辑ItemInfo字段,将其中的family修改为DroidSansFallback.ttf,如下:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203515956-1911317193.png)
再次加载这一修改后的geodatabase,中文标注终于出现了。
family修改前:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203534143-143975437.png)
family修改后:
![](http://images2015.cnblogs.com/blog/611207/201510/611207-20151011203551440-1088897108.png)
是的,你没看错,就是这么傻。就相当于你听到张三的名字,完全不知道是谁,必须得见到本尊,才清楚,原来是他啊,我认识,我认识,呵呵,呵呵。。。。。
既然ArcMap创建的离线geodatabase可以正确显示中文标注了。那么类比的,对于由在线服务获取的离线geodatabase,只需要代码实现1)连接这一SQLite数据库,2)找到GDB_ServiceItem表的ItemInfo字段,3)修改这一属性值。具体实现就劳驾大家了。这一小章节就到此吧。
小报,小报:
根据Esri非官方渠道,明年3月份推出的Quarz版本将从根本上解决这一问题。小编再也不用为应用中的中文标注担心了。
相关文章推荐
- Android 6.0新特性
- Android Socket 编程
- Android音频系统之AudioTrack(二)
- Android 传感器 (详解一)—— 简单介绍传感器的使用步骤
- Android音频系统之AudioTrack(一)
- Android 自定义系统对话框
- Android拍照后Bitmap内存溢出的解决办法
- Android~外部类监听器~实现Activity的跳转
- Android应用的四大基本组件介绍
- android学习之1:拍照保存图片
- Android 使用AsyncTaskLoader获取手机联系人
- Android 使用CursorLoader获取手机短信
- android上传图片(及普通参数)到服务器(j2ee后台服务器,ssh框架)
- Android 获取手机的联系人进行操作
- Android 操作软键盘
- Android 容器焦点设置 android:descendantFocusability
- Android数据存储方式之——Shareprefences
- Android按钮跳转页面
- Android Design ItemTouchHelper实现酷炫列表的移行和滑动删除效果
- Android中使用pull解析xml文件