編輯:關於Android編程
一些復雜語言如泰語、緬甸語、印地語,經常會看到一些帶有虛線圈圈字符。這是一種正常的處理機制。對於那些不能單獨存在的字符,在顯示時額外添加虛線圈,以提供對於這些字符的含義的一些提示,使得這些字符在顯示時能夠有更加適當的位置,避免字符的無限疊加等問題。如在Windows7上的office2010中緬甸語也有同樣的行為,如下圖:
Mtk在JB版本引入了這種機制,如果想去掉圈圈這種機制,可以按照如下方法:
泰語:
JB、JB2版本:
externalharfbzzsrcharfbuzz-thai.c
注釋如下代碼
about line 418
case tR:
// charIndex[(*outputIndex)] = inputIndex;
// outputBuffer[(*outputIndex)++] = errorChar;
charIndex[(*outputIndex)] = inputIndex;
outputBuffer[(*outputIndex)++] = currChar;
break;
about line 426
case tS:
// if (currChar == CH_SARA_AM) {
// charIndex[(*outputIndex)] = inputIndex;
// outputBuffer[(*outputIndex)++] = errorChar;
// }
charIndex[(*outputIndex)] = inputIndex;
outputBuffer[(*outputIndex)++] = currChar;
break;
JB3、JB5版本由於變形引擎不同,默認是不帶圈圈的,如果想使用這種機制,可以修改:frameworks/base/core/jni/android/graphics/TextLayoutCache.cp
about line 820
switch (script) {
case HB_SCRIPT_MYANMAR:
return &GraphiteLayoutShaper::getInstance();
case HB_SCRIPT_BENGALI:
case HB_SCRIPT_THAI: ////新增此句 harfbuzzShaper.setShapingScript(getHBScriptFromHBNgScript(script));
return &harfbuzzShaper;
default:
harfbuzzNgShaper.setShapingScript(script);
return &harfbuzzNgShaper;
}
緬甸語:
JB、JB2版本:
externalharfbzzsrcharfbuzz-myanmar.c
注釋如下代碼就行,一共有三處。
// reordered[len] = Mymr_C_DOTTED_CIRCLE;
// len += 1;
JB3、JB5版本由於變形引擎不同,默認是不帶圈圈的,如果想使用這種機制,可以修改:frameworks/base/core/jni/android/graphics/TextLayoutCache.cp
about line 820
switch (script) {
case HB_SCRIPT_MYANMAR:
// return &GraphiteLayoutShaper::getInstance();注釋此句
case HB_SCRIPT_BENGALI:
harfbuzzShaper.setShapingScript(getHBScriptFromHBNgScript(script));
return &harfbuzzShaper;
default:
harfbuzzNgShaper.setShapingScript(script);
return &harfbuzzNgShaper;
}
需要注意的是,去掉圈圈機制可以會導致一些字符變形問題,如連續輸入上下標、母音等字符,後面的字將不斷往前面的字上面疊。同時由於該solution沒能做嚴格的測試,而有可能存在其他潛在的風險。在不能單獨存在的字符單獨出現時去除虛線圈的做法,並不合理,並可能存在其他問題。如果要去掉,需要評估風險。
另外緬甸語比較特殊、緬甸語有官方和民間之分,二者不同的是編碼機制不同,因此這2種緬甸語的字串翻譯、處理引擎、字庫都是不同的。如果遇到問題可以先按照如下方法排查:
1、 如果字串中出現一個圈圈可能是個別字串翻譯問題,可以參考FAQ09106解決。
2、 如果浏覽網頁或者界面中出現大量圈圈、這可能是網頁內容或者翻譯和字庫不匹配導致。如大多緬甸語網站是民間緬甸語的,如果使用官方的緬甸語引擎和字庫訪問的話,就會出現這個問題。
目前mtk僅僅支持官方的緬甸語,如果要支持民間緬甸語,通過簡單修改(修改翻譯、替換字庫)存在諸多風險,需要自行評估或者咨詢mtk工程師。
本文實例講述了Android中Service實時向Activity傳遞數據的方法。分享給大家供大家參考。具體如下:這裡演示一個案例,需求如下:在Service組件中創建一
一、 What? 什麼是PageObject?簡稱PO,這是一個設計模式,其實設計模式就是代碼的架構,一個整體的框架。例如mvc 就是模型-視圖-控制的一個代碼架構,mv
Android的消息機制主要是指Handler的運行機制,Handler的運行需要底層的MessageQueue和Looper的支撐。MessageQueue 消息隊列,
一、為什麼需要自定義鎖屏頁鎖屏作為一種黑白屏時代就存在的手機功能,至今仍發揮著巨大作用,特別是觸屏時代的到來,鎖屏的功用被發揮到了極致。多少人曾經在無聊的時候每隔幾分鐘劃