我需要制作我的自定义 AutoCompleteTextView。我在适配器中使用 Unicode 字符,但问题是用户并不总是拥有或使用带有 unicode 字符的键盘。
这个想法是当用户以字母 C 开头时,我会建议以 C,Ć,Č 开头的项目
当用户输入字母 S 时,我会建议以 S 和 Š 开头的项目
有没有办法使这项工作?
我需要制作我的自定义 AutoCompleteTextView。我在适配器中使用 Unicode 字符,但问题是用户并不总是拥有或使用带有 unicode 字符的键盘。
这个想法是当用户以字母 C 开头时,我会建议以 C,Ć,Č 开头的项目
当用户输入字母 S 时,我会建议以 S 和 Š 开头的项目
有没有办法使这项工作?
我已经解决了这个问题:
我已经编写了将 unicode 字符串转换为非 unicode 的方法。
/** Remove HTML constants for unicode chars from string */
public static String convertFromUnicode(String text, Context ctx) {
// Find wrong unicode chars and replace it with non-unicode
text = text.replaceAll(ch, "c");
text = text.replaceAll(zh, "z");
text = text.replaceAll(sh, "s");
text = text.replaceAll(tj, "c");
text = text.replaceAll(Ch, "C");
text = text.replaceAll(Zh, "Z");
text = text.replaceAll(Sh, "S");
text = text.replaceAll(Tj, "C");
text = text.replaceAll(ctx.getResources().getString(R.string.ch), "c");
text = text.replaceAll(ctx.getResources().getString(R.string.zh), "z");
text = text.replaceAll(ctx.getResources().getString(R.string.sh), "s");
text = text.replaceAll(ctx.getResources().getString(R.string.tj), "c");
text = text.replaceAll(ctx.getResources().getString(R.string.Ch), "C");
text = text.replaceAll(ctx.getResources().getString(R.string.Zh), "Z");
text = text.replaceAll(ctx.getResources().getString(R.string.Sh), "S");
text = text.replaceAll(ctx.getResources().getString(R.string.Tj), "C");
return text;
}
并在 CustomAdaper 的 performFiltering 中:
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (String showName : itemsAll) {
String tempshowName = ParserData.convertFromUnicode(showName,
getContext());
String tempContraint = ParserData.convertFromUnicode(
constraint.toString(), getContext());
if (tempshowName.toLowerCase().startsWith(
tempContraint.toString().toLowerCase())) {
suggestions.add(showName);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
所以 unicode 而不是 unicode 字符似乎是相等的。Tnx 的想法@dilix。
您可以实现自己的过滤器,例如不仅返回 C* 值,还返回 C*,Ć*,Č*
如何实现您自己的过滤器,您可以在此处找到