0

我需要制作我的自定义 AutoCompleteTextView。我在适配器中使用 Unicode 字符,但问题是用户并不总是拥有或使用带有 unicode 字符的键盘。

这个想法是当用户以字母 C 开头时,我会建议以 C,Ć,Č 开头的项目

当用户输入字母 S 时,我会建议以 S 和 Š 开头的项目

有没有办法使这项工作?

4

3 回答 3

0

您是否尝试过实现标准的 Android搜索界面,但使用FTS3/4表获取 ICU标记器的建议?

我还没有实现 Unicode 搜索,但使用 ICU 标记器可能会起作用。也许尝试过的人可以评论这个答案?

于 2012-12-13T08:55:16.960 回答
0

我已经解决了这个问题:

我已经编写了将 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。

于 2012-12-13T09:19:06.797 回答
0

您可以实现自己的过滤器,例如不仅返回 C* 值,还返回 C*,Ć*,Č*

如何实现您自己的过滤器,您可以在此处找到

带有自定义适配器过滤的 Android AutoCompleteTextView 不起作用

于 2012-12-13T08:51:08.140 回答