mcxtzhang/SuspensionIndexBar

多音字

Opened this issue · 8 comments

能识别常州市,不能识别长沙市,长春市,还有其他个别的也是这样!大神 ,应该怎么改呀,谢谢~

遇到同样的问题,还是tinypinyin库的问题吧,现在依赖远程库,不能改源码啊。

遇到同样问题,厦门对于字母应该是- X,但是对应到了S

可以在特殊的城市前面加上一个谐音字,如长沙,写成常长沙,在显示的时候进行判断把常去掉就好了

现在重庆市对应到Z,应该对应到C的啊,怎么处理呢

要修改IndexBar源码,将源码的 Pinyin 依赖升级,还要添加 Pinyin 的两个依赖,最后修改 IndexBarDataHelperImpl 这个类 convert方法里面的 Pinyin.toPinyin

@Override
public IIndexBarDataHelper convert(List<? extends BaseIndexPinyinBean> datas, Context context) {
    if (null == datas || datas.isEmpty()) {
        return this;
    }
    int size = datas.size();
    for (int i = 0; i < size; i++) {
        BaseIndexPinyinBean indexPinyinBean = datas.get(i);
        StringBuilder pySb = new StringBuilder();
        //add by zhangxutong 2016 11 10 如果不是top 才转拼音,否则不用转了
        if (indexPinyinBean.isNeedToPinyin()) {
            String target = indexPinyinBean.getTarget();//取出需要被拼音化的字段

            //遍历target的每个char得到它的全拼音
            for (int i1 = 0; i1 < target.length(); i1++) {
                //利用TinyPinyin将char转成拼音
                //查看源码,方法内 如果char为汉字,则返回大写拼音
                //如果c不是汉字,则返回String.valueOf(c)
                pySb.append(Pinyin.toPinyin(target.charAt(i1)).toUpperCase());
            }
            if (pySb.toString().equals("ZHONGQING")) {
                indexPinyinBean.setBaseIndexPinyin("CHONGQING");//修改重庆
            } else if (pySb.toString().equals("ZHANGCHUN")) {
                indexPinyinBean.setBaseIndexPinyin("CHANGCHUN");//修改长春
            } else {
                indexPinyinBean.setBaseIndexPinyin(pySb.toString());//设置城市名全拼音
            }
        } else {
            //pySb.append(indexPinyinBean.getBaseIndexPinyin());
        }
    }
    return this;
}

修改之前确认错误的多音是什么再进行修改

你们是把引用库拿出来到本地改源码处理这个问题的吗?