Arcgis for Android 中文乱码只因没有再尝试一步

现象

使用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";
}

正因为不能保证所有系统都有下面的字体,那么这个问题还是不能得到解决。

废话不多说放大招:

  1. 下载DroidSansFallback.ttf" 字体【单击下载
  2. 复制下载字体至内存卡
  3. 使用下面的子类进行字体显示(注意字体在内存卡的路径)
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);
    }

}

参考:
http://www.cnblogs.com/gis-luq/p/4833361.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值