现象
使用Arcgis for Android SDK 开发地图应用时,难免会显示中文,但是当我们把中文显示在地图时,部分手机显示正常,部分手机直接就什么都没有显示,还有一部分显示乱码。
原因
导致乱码的原因部分博客分析一此手机不支持中文字体,当然这没有错,如果 Android 不支持中文字体那系统的中文怎么显示出来的。Arcgis
使用了 OpenGL 进行绘图,在使用 TextSymbol
进行显示文字提供了设置字体的方法,但设置了系统已经有的中文字体就可以显示出来了,那么说明和字体是相关的。
解决办法
方法 1
使用图片代替文字显示
此方法请查看http://blog.csdn.net/u013758734/article/details/41702025
当显示过多内容势必占用内存,所以不太推荐使用此办法。好在我发现第二种办法,不然或许只能用这个办法了。
方法 2 ( 推荐 )
从原因出发
因为 Arcgis 在画 TextSymbol
时没有中文字体,或使用的默认字体不支持中文,所以才导致了这样的问题,我们不能期望Arcgis做些什么,也不能让Android系统在每个终端中加入指定字体。只能自己带个中文字体了。
其它博客写到在使用TextSymbol时使用setFontFamily()设置以下两种字体,因为这两个是支持中文显示的。
String fontFamily = "DroidSansFallback.ttf";
if(Build.VERSION.SDK_INT >= 21){
fontFamily = "NotoSansHans-Regular.otf";
}
正因为不能保证所有系统都有下面的字体,那么这个问题还是不能得到解决。
废话不多说放大招:
- 下载
DroidSansFallback.ttf"
字体【单击下载】 - 复制下载字体至内存卡
- 使用下面的子类进行字体显示(注意字体在内存卡的路径)
import com.esri.core.symbol.TextSymbol;
import org.codehaus.jackson.JsonNode;
import java.io.File;
/**
* Created by canney on 2017/6/11.
*/
public class MyTextSymbol extends TextSymbol {
private static final long serialVersionUID = 357217592429086811L;
public MyTextSymbol(int size, String text, int color, HorizontalAlignment halign, VerticalAlignment valign) {
super(size, text, color, halign, valign);
fixedNotSupportChineseBug();
}
public MyTextSymbol(int size, String text, int color) {
super(size, text, color);
fixedNotSupportChineseBug();
}
public MyTextSymbol(JsonNode node) {
super(node);
fixedNotSupportChineseBug();
}
public MyTextSymbol(String fontFamily, String text, int color) {
super(fontFamily, text, color);
fixedNotSupportChineseBug();
}
public MyTextSymbol(TextSymbol textSymbol) {
super(textSymbol);
fixedNotSupportChineseBug();
}
/**
* 解决中文乱码问题
*/
private void fixedNotSupportChineseBug() {
//字体在内存卡的路径
String fontFamilyPath = "DroidSansFallback.ttf";
String fontFamily = new File(Environment.getExternalStorageDirectory(), fontFamilyPath).getPath();
setFontFamily(fontFamily);
}
}