在14年的時候寫過一篇博客關於ArcGIS for Android 10.1.1API 中文標註致使程序異常崩潰問題,可是當時並無很好的解決這樣一個問題,也並無深刻研究分析這樣的一個異常的產生緣由,或者中文標註亂碼、不顯示、異常顯示是什麼緣由形成的。而是使用了一種折中的解決方案:對於要使用TextSymbol的狀況,先將文本信息轉化成爲圖片,而後利用PictureSymbol顯示。這樣雖然可以避免異常的產生,可是總以爲現有的解決方案並不是正解。加上羣裏的朋友也恰好研究到了這一塊,並提供了對應的解決方案,只要在顯示文本信息時,設置字體便可。html
核心代碼以下所示:工具
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 原生系統)post
因而換了個設備並做測試,而後奇蹟的發現顯示又是正常的。(三星GT-P7510,Android版本4.1.2 CM版)測試
轉載請註明出處:http://www.cnblogs.com/gis-luq/p/4833361.html字體
針對上面的問題是如何產生的呢?經過查閱資料我在網上看到如下這樣一段話。ui
Android系統中通常中英文字體包,主要是DroidSansFallback.ttf(中文字體)、DroidSans.ttf(英文字體)、 DroidSans-Bold.ttf(英文加粗字體)這三種,由於這三種字體是Andorid系統中幾乎每個顯示界面都要使用到的字體,是默認的系統字體,因此只要你是Android手機,通常系統就內置有這三款字體。this
可是估計也有例外,由於對於定製的Android系統有沒有這個字體,這個字體是否是默認的就真的很差說了,好比MIUI。還有就是咱們測試時候採用原生Android 5.01系統的Nexus4顯示也是異常的,那這又是爲何? 這裏我嘗試打開Android Device Monitor工具並檢查字體。url
在Android Device Monitor工具下找到File Explorer,字體庫的位置是在:/system/fonts文件夾下。spa
經過仔細檢查,發現Android 5.01系統的Nexus4的字體庫中並無DroidSansFallback.ttf字體文件,而後我又用一樣的方式查看了三星GT-P7510,Android版本4.1.2系統的字體庫,在字體庫裏咱們如期發現了DroidSansFallback.ttf字體,到這裏也就可以解釋,爲何在Nexus4中字體顯示異常,在GT-P7510顯示正常的緣由。.net
網上有不少教你們替換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),最後終因而成功了。結果以下圖:
其實在剖析產生緣由的時候已經介紹了處理方案,這裏簡單的再總結下。
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
http://www.68idc.cn/help/buildlang/ask/20150102153583.html
http://www.zhihu.com/question/26202765
http://jingyan.baidu.com/article/8275fc86b80c6d46a03cf6f9.html