Arcgis10.2.7 for android 地图添加图层文字乱码问题

最近接手公司先前的项目,各种坑等待我去填呀,当然,填坑的过程也是成长的过程!

不废话,直接说问题,在开发Arcgis地图时,需要在图层上添加文字,可是本来在测试机上文字好好的显示,我换了个手机跑了下程序,发现图层上所有的文字都乱码了。。。

首先看添加图层文字代码

public static Symbol getLayerTextSymbolById(int id, String text, double scale) {
        int textSize = MapUtil.getLayerTextSizeById(id, scale);
        if (0 != textSize) {
            TextSymbol textSymbol = new TextSymbol("这里写字体大小", text,"这里写字体颜色");
            textSymbol.setFontFamily("DroidSansFallback.ttf");
            textSymbol.setVerticalAlignment(TextSymbol.VerticalAlignment.MIDDLE);
            textSymbol.setHorizontalAlignment(TextSymbol.HorizontalAlignment.CENTER);
            return textSymbol;
        }
        return null;
    }

其中 textSymbol.setFontFamily("DroidSansFallback.ttf");就是设置添加的文字字体,可是对于字体DroidSansFallback.ttf,并不是每个手机系统都是默认是它,如果我手机里的默认字体不是它,那么显示的图层文字就会出现乱码的情况,这也是为什么本人当前开发的项目在测试手机上正常,换个手机就不行的原因。

问题解决:

首先进行各种百度,发现很多人跟我一样遇到这个问题,但就是没说明解决办法。其中大多数就是说需要把手机root一下,然后下载字体文件解压到font字体目录下,然后就可以了,我的天!我怎么可能让使用app的用户去root手机呢,还下载文件。。。。。。不说了。。。

然后就法现了一个博客http://www.2cto.com/kf/201706/645991.html ,说是把字体文件放到内存卡,然后引用textSymbol.setFontFamily("现在这里放字体文件子啊内存卡中的绝对路径");,我就下载了一个DroidSansFallback.ttf文件,放到内存卡目录中,亲测可用。

我的第一想法就是把这个字体文件DroidSansFallback.ttf扔到我们自己的服务器上,然后用户第一次进入APP就悄悄地把这个文件下载下来,然后供APP使用。但是还没实行,我又想,为什么不能把这个文件扔到assert文件夹下呢?然后我就开始测试,但是发现怎么搞都不行,又准备放弃的时候又想起来我可以把这个字体文件从assert中复制到手机内存中呀,然后又搞了下,问题解决~

复制文件工具类

public class CopyFontFile {
    private static final String PHONE_PATH = "data/data/com.youta.wisdomport/databases/";
    public static final String FONT_PATH = PHONE_PATH + "DroidSansFallback.ttf";
    private Context mContext;
    
    public CopyFontFile(Context context){
         this.mContext = context;
    }
    
    public void DoCopy(){
        try{
            File dataFile = new File(FONT_PATH);
            if(dataFile.exists()){
                Log.i("CopyFontFile","qwer---> 文件已存在");
                return;
            }else{
                Log.i("CopyFontFile","qwer---> 文件不存在");
            }
            
             File file = new File(PHONE_PATH);
             if(!file.exists()){
                   file.mkdir();
             }
             if(!(new File(FONT_PATH).exists())){
                 InputStream mips = this.mContext.getResources().getAssets().open("DroidSansFallback.ttf");
                 FileOutputStream mos = new FileOutputStream(FONT_PATH);
                 byte[] buffer = new byte[1024*1024];
                 int count = 0;
                 
                 while((count = mips.read(buffer)) >0){
                    mos.write(buffer,0,count);
                 }
                 mos.close();
                 mips.close();
             }
             
        }catch(IOException e){
             e.printStackTrace();
        }
        
    }

}

在Activity中调用:

CopyFontFile mCopyData_File = new CopyFontFile(this);
mCopyData_File.DoCopy();

字体重新设置

public static Symbol getLayerTextSymbolById(int id, String text, double scale) {
        int textSize = MapUtil.getLayerTextSizeById(id, scale);
        if (0 != textSize) {
            TextSymbol textSymbol = new TextSymbol(MapUtil.getLayerTextSizeById(id, scale), text,
                    MapUtil.getLayerTextColorById(id));
            String fontFamily = new File(CopyFontFile.FONT_PATH).getPath();
            textSymbol.setFontFamily(fontFamily);
            textSymbol.setVerticalAlignment(TextSymbol.VerticalAlignment.MIDDLE);
            textSymbol.setHorizontalAlignment(TextSymbol.HorizontalAlignment.CENTER);
            return textSymbol;
        }
        return null;
    }

!!! 2017年12月18日补充

在后来的又一次开发中,我再一次需要解决这个问题,可是日了狗了,同样的代码,无论怎么搞都是乱码。。。。。
最后这个问题困扰了我3天,终于解决,有点莫名奇妙,但问题解决就好


arcgis地图SDK.png

不明原因,加上v7a包和x86包就乱码,去掉就好了。。。

有问题欢迎留言讨论

版权声明:个人原创,若转载,请注明出处
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容