原因:
让我们看看源码是怎么写的,我做了一下修复,稍后再介绍:
public static HanziToPinyin getInstance() {
synchronized (HanziToPinyin.class) {
if (sInstance != null) {
return sInstance;
}
// Check if zh_CN collation data is available
final Locale locale[] = Collator.getAvailableLocales();
Locale newChina = new Locale("zh", "HANS", "CN");//这部分是我做的修复,解决HTC兼容性问题
for (int i = 0; i < locale.length; i++) {
if (locale[i].equals(Locale.CHINA) || locale[i].equals(newChina)) {
// Do self validation just once.
if (DEBUG) {
Log.d(TAG, "Self validation. Result: " + doSelfValidation());
}
sInstance = new HanziToPinyin(true);
return sInstance;
}
}
Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");
sInstance = new HanziToPinyin(false);
return sInstance;
}
}
上面的代码可以看到做了一下检测,看看是不是支持中文,而HTC手机里返回的是zh-Hans-CN,所以自然会返回失败,但是手机确实支持中文,经过调试以后发现返回的Locale数组里有这个东西zh-Hans-CN,我们再看下zh-Hans-CN是什么
zh-Hans 简体中文
zh-Hans-CN 大陆地区使用的简体中文
zh-Hans-HK 香港地区使用的简体中文
zh-Hans-MO 澳门使用的简体中文
zh-Hans-SG 新加坡使用的简体中文
zh-Hans-TW 台湾使用的简体中文
zh-Hant 繁体中文
zh-Hant-CN 大陆地区使用的繁体中文
zh-Hant-HK 香港地区使用的繁体中文
zh-Hant-MO 澳门使用的繁体中文
zh-Hant-SG 新加坡使用的繁体中文
zh-Hant-TW 台湾使用的繁体中文
可以看出,Hans是简体中文,Hant是繁体中文。而这样划分更明确。貌似Win8也是这样划分的。
解决方案:
解决方案我已经在原因里贴上去了,其实也就是加入对hans这样的判断,希望兼容5.0,感觉5.0应该也会这样写吧。