第一步:添加
implementation 'com.github.open-android:pinyin4j:2.5.0'
第二步:拼音工具类
public class Pinyin4jUtil { public static StringBuilder sb=new StringBuilder(); /** * 获取汉字字符串的各个字首字母 * 中国:zg * @param chines * @return */ public static String getPinYinHeadChar(String chines){ sb.setLength(0); char[] chars=chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat=new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i=0;i<chars.length;i++){ if(chars[i]>128){ try{ sb.append(PinyinHelper.toHanyuPinyinStringArray(chars[i],defaultFormat)[0].charAt(0)); }catch (Exception e){ e.printStackTrace(); } }else{ sb.append(chars[i]); } } return sb.toString(); } /** * 获取汉字字符串的首字母 * 中国:Z * @param string * @return */ public static String getPinYinFirstLetter(String string){ sb.setLength(0); char c=string.charAt(0); String[] pinyinArray=PinyinHelper.toHanyuPinyinStringArray(c); if (pinyinArray!=null){ sb.append(pinyinArray[0].charAt(0)); }else{ sb.append(c); } return sb.toString().toUpperCase(); } /** * 获取汉字字符串的汉语拼音 * 中国:zhongguo * @param chines * @return */ public static String getPinYin(String chines) { sb.setLength(0); char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { sb.append(PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]); } catch (Exception e) { e.printStackTrace(); } } else { sb.append(nameChar[i]); } } return sb.toString(); } }
第三步:在添加数据源里面使用(也就是你输入拼音首字母要匹配的名字)
String pinyin = Pinyin4jUtil.getPinYin(bean.getName()); bean.setPinyin(pinyin);
第四步:在adapter里面继承 implements Filterable 过滤(不管是listview还是recycleview都可以实现)
第五步:自定义适配
// 定义过滤的适配 private class PersonFilter extends Filter { private List<Bean> bean; public PersonFilter(List<Bean> list) { this.bean= list; } @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (constraint == null || constraint.length() == 0) { results.values = bean; results.count = bean.size(); } else { List<Bean> mList = new ArrayList<Bean>(); for (Bean p: bean) { if (p.getName().toUpperCase().startsWith(constraint.toString().toUpperCase()) || p.getPinyin().toUpperCase().startsWith(constraint.toString().toUpperCase()) ) { mList.add(p); } } results.values = mList; results.count = mList.size(); } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { displayList = (List<Bean>)results.values; notifyDataSetChanged(); } }
第六步:实现调用过滤
@Override public Filter getFilter() { if (filter == null) { filter = new PersonFilter(realList); } return filter; }