検索フィルターで検索したテキストを強調表示するにはどうすればよいですか?

user2386226

すべての「表示されている」検索文字が強調表示されるように検索しようとしています。私はスパナブルを使ってみましたが、それはうまくいきませんでした、多分私はそれを正しくしていませんでしたか?これに基づく:ListViewアイテムで検索されたテキストを強調表示する表示されているテキストを強調表示するにはどうすればよいですか?これが私のフィルターです:

private LayoutInflater mInflater;

        private ValueFilter valueFilter;

        public MySimpleArrayAdapter(Activity context) {

            this.context = context;
            mInflater = LayoutInflater.from(context);

        }
        private class ValueFilter extends Filter {


            //Invoked in a worker thread to filter the data according to the constraint.
            @Override
            protected synchronized FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults();

                if (constraint != null && constraint.length() > 0) {

                    ArrayList<Integer> filterList = new ArrayList<>();

                    int iCnt = listItemsHolder.Names.size();
                    for (int i = 0; i < iCnt; i++) {
                        if(listItemsHolder.Types.get(i).toString().indexOf("HEADER_")>-1){
                            continue;
                        }
                        if (listItemsHolder.Names.get(i).matches(getRegEx(constraint))||(listItemsHolder.Names.get(i).toLowerCase().contains(constraint.toString().toLowerCase()))) {
                            if(filterList.contains(i))
                                continue;

                            filterList.add(i);

                        }
                        }

                    results.count = filterList.size();

                    results.values = filterList;
                }else {
                String prefixString = getRegEx(constraint);
                mSearchText = prefixString;
                    results.count = listItemsHolder.Names.size();

                    ArrayList<Integer> tList = new ArrayList<>();
                    for(int i=0;i<results.count;i++){
                        tList.add(i);
                    }

                    results.values = tList;

                }

                return results;


}


                //Invoked in the UI thread to publish the filtering results in the user interface.
                @SuppressWarnings("unchecked")
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    ArrayList<Integer> resultsList = (ArrayList<Integer>)results.values;
                    if(resultsList != null) {
                        m_filterList = resultsList;
                    }
                    notifyDataSetChanged();
                }

            }

            public String getRegEx(CharSequence elements){
                String result = "(?i).*";
                for(String element : elements.toString().split("\\s")){
                    result += element + ".*";
                }
                result += ".*";
                return result;
            }

Thanks in advance! 

これが私のgetviewです

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View rowView = convertView;
            ViewHolder holder;
            if(filtering && m_filterList != null && m_filterList.size() > position)
                position = m_filterList.get(position);

            if (rowView == null) {
                holder = new ViewHolder();

                mInflater = context.getLayoutInflater();
                rowView = mInflater.inflate(R.layout.rowlayout, null);
                // configure view holder
                holder.text = (TextView) rowView.findViewById(R.id.label);
                holder.text.setTextColor(Color.WHITE);
                holder.text.setSingleLine();
                holder.text.setTextSize(15);
                holder.text.setEllipsize(TextUtils.TruncateAt.END);
                holder.text.setPadding(2, 2, 6, 2);
                Typeface label = Typeface.createFromAsset(holder.text.getContext().getAssets(),
                        "fonts/arial-bold.ttf");
                holder.text.setTypeface(label);
                holder.image = (ImageView) rowView.findViewById(R.id.icon);
                holder.image.setPadding(6, 4, 0, 4);
                holder.image.getLayoutParams().height = (int) getResources().getDimension(R.dimen.icon_width_height);
                holder.image.getLayoutParams().width = (int) getResources().getDimension(R.dimen.icon_width_height);
                rowView.setBackgroundResource(R.drawable.row_border);
                rowView.setPadding(2, 2, 6, 2);
                rowView.setTag(holder);
            }else {

                // fill data
                holder = (ViewHolder) rowView.getTag();
            }

            String id  = listItemsHolder.getid(position);
            String name = listItemsHolder.getName(position);
            holder.image.setVisibility(View.VISIBLE);


            if (name != null) {
                holder.text.setText(listItemsHolder.getName(position));
                ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) holder.text.getLayoutParams();
                params.leftMargin = 20;
            }else{
                holder.text.setText(id);
            }
            String fullText = listItemsHolder.getName(position);
            // highlight search text
            if (mSearchText != null && !mSearchText.isEmpty()) {
                int startPos = fullText.toLowerCase(Locale.US).indexOf(mSearchText.toLowerCase(Locale.US));
                int endPos = startPos + mSearchText.length();
                if (startPos != -1) {
                    Spannable spannable = new SpannableString(fullText);
                    ColorStateList blueColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.BLUE});
                    TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);
                    spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    holder.text.setText(spannable);
                } else {
                    holder.text.setText(fullText);
                }
            } else {
                holder.text.setText(fullText);
            }
            return rowView;
        }
BNK

カスタムアダプタを作成したと仮定すると、次のコードを参照できます。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        TextView text;

        if (convertView == null) {
            view = mInflater.inflate(mResource, parent, false);
        } else {
            view = convertView;
        }

        try {
            if (mFieldId == 0) {
                //  If no custom field is assigned, assume the whole resource is a TextView
                text = (TextView) view;
            } else {
                //  Otherwise, find the TextView field within the layout
                text = (TextView) view.findViewById(mFieldId);
            }
        } catch (ClassCastException e) {
            Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");
            throw new IllegalStateException(
                    "ArrayAdapter requires the resource ID to be a TextView", e);
        }
        String item = getItem(position);
        text.setText(item);

        String fullText = getItem(position);
        // highlight search text
        if (mSearchText != null && !mSearchText.isEmpty()) {
            int startPos = fullText.toLowerCase(Locale.US).indexOf(mSearchText.toLowerCase(Locale.US));
            int endPos = startPos + mSearchText.length();

            if (startPos != -1) {
                Spannable spannable = new SpannableString(fullText);
                ColorStateList blueColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.BLUE});
                TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);
                spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                text.setText(spannable);
            } else {
                text.setText(fullText);
            }
        } else {
            text.setText(fullText);
        }

        return view;
    }

mSearchText以下の内部で更新されるperformFilteringArrayFilterクラス。

String prefixString = prefix.toString().toLowerCase();
mSearchText = prefixString;

詳細については、こちらのサンプルコードまたはGitHub(最新の更新あり)をご覧ください

これがスクリーンショットです

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

vimエディターで検索したテキストを強調表示するにはどうすればよいですか?

分類Dev

検索したテキストを置き換えるにはどうすればよいですか?それが強調表示されますか?

分類Dev

検索ボックスに入力されたドキュメント内の単語を強調表示するにはどうすればよいですか?

分類Dev

レンダリングしたデータで検索された単語を強調表示するにはどうすればよいですか?

分類Dev

結果で検索された文字列を強調表示するにはどうすればよいですか?

分類Dev

DataGridViewの特定の列の検索テキストを強調表示するにはどうすればよいですか?

分類Dev

テーブルデータを検索するための検索入力フィールドを作成するにはどうすればよいですか?

分類Dev

テキストファイルを適切に渡して、そこにあるデータを検索するにはどうすればよいですか?

分類Dev

Selenium Webdriverを介して検索フィールドにテキストを送信するにはどうすればよいですか?

分類Dev

ドキュメント内で検索された複数の単語を強調表示するにはどうすればよいですか?

分類Dev

mysqlの1つのテキストフィールドで複数のフィールドを検索するにはどうすればよいですか?

分類Dev

UISearchControllerを使用して複数のアイテムを検索するために検索バーのテキストフィールドの高さを拡張するにはどうすればよいですか?

分類Dev

単語検索ゲーム。グリッドを検索して結果を強調表示するにはどうすればよいですか?

分類Dev

検索およびフィルタリングされた値のクエリテーブルを表示するにはどうすればよいですか?

分類Dev

Vimで選択したテキストを検索するにはどうすればよいですか?

分類Dev

検索入力フィールドがクリアされているときに、リストアイテムを検索フィルターから非表示にするにはどうすればよいですか?

分類Dev

選択したテキストを検索するにはどうすればよいですか?

分類Dev

HTMLファイルでタグに依存しないテキスト文字列検索を実行するにはどうすればよいですか?

分類Dev

C ++で特定の行を検索した後、ファイルの最後にテキストを追加するにはどうすればよいですか?

分類Dev

tmuxで検索結果を強調表示するにはどうすればよいですか?

分類Dev

React-Native FlatListで検索結果を強調表示するにはどうすればよいですか?

分類Dev

オブジェクトのリストからデータを表示するために、ユーザーのキーワードに従って検索とフィルターを実装するにはどうすればよいですか?

分類Dev

Reactで検索したテキストを強調表示する

分類Dev

コンテキストアクションバーに「検索」フィールドを作成するにはどうすればよいですか?

分類Dev

検索バーのテキストに表示するにはどうすればよいですか?

分類Dev

ユーザーが検索ボックスに入力したテキストでオブジェクトの配列をフィルタリングするにはどうすればよいですか?

分類Dev

Laravel検索フィルター機能のクエリステートメントを作成するにはどうすればよいですか?

分類Dev

3文字入力した場合のみフィルター/検索バー検索を行うにはどうすればよいですか?

分類Dev

検索フィールドがクリアされたときにアイテムを非表示にするにはどうすればよいですか?

Related 関連記事

  1. 1

    vimエディターで検索したテキストを強調表示するにはどうすればよいですか?

  2. 2

    検索したテキストを置き換えるにはどうすればよいですか?それが強調表示されますか?

  3. 3

    検索ボックスに入力されたドキュメント内の単語を強調表示するにはどうすればよいですか?

  4. 4

    レンダリングしたデータで検索された単語を強調表示するにはどうすればよいですか?

  5. 5

    結果で検索された文字列を強調表示するにはどうすればよいですか?

  6. 6

    DataGridViewの特定の列の検索テキストを強調表示するにはどうすればよいですか?

  7. 7

    テーブルデータを検索するための検索入力フィールドを作成するにはどうすればよいですか?

  8. 8

    テキストファイルを適切に渡して、そこにあるデータを検索するにはどうすればよいですか?

  9. 9

    Selenium Webdriverを介して検索フィールドにテキストを送信するにはどうすればよいですか?

  10. 10

    ドキュメント内で検索された複数の単語を強調表示するにはどうすればよいですか?

  11. 11

    mysqlの1つのテキストフィールドで複数のフィールドを検索するにはどうすればよいですか?

  12. 12

    UISearchControllerを使用して複数のアイテムを検索するために検索バーのテキストフィールドの高さを拡張するにはどうすればよいですか?

  13. 13

    単語検索ゲーム。グリッドを検索して結果を強調表示するにはどうすればよいですか?

  14. 14

    検索およびフィルタリングされた値のクエリテーブルを表示するにはどうすればよいですか?

  15. 15

    Vimで選択したテキストを検索するにはどうすればよいですか?

  16. 16

    検索入力フィールドがクリアされているときに、リストアイテムを検索フィルターから非表示にするにはどうすればよいですか?

  17. 17

    選択したテキストを検索するにはどうすればよいですか?

  18. 18

    HTMLファイルでタグに依存しないテキスト文字列検索を実行するにはどうすればよいですか?

  19. 19

    C ++で特定の行を検索した後、ファイルの最後にテキストを追加するにはどうすればよいですか?

  20. 20

    tmuxで検索結果を強調表示するにはどうすればよいですか?

  21. 21

    React-Native FlatListで検索結果を強調表示するにはどうすればよいですか?

  22. 22

    オブジェクトのリストからデータを表示するために、ユーザーのキーワードに従って検索とフィルターを実装するにはどうすればよいですか?

  23. 23

    Reactで検索したテキストを強調表示する

  24. 24

    コンテキストアクションバーに「検索」フィールドを作成するにはどうすればよいですか?

  25. 25

    検索バーのテキストに表示するにはどうすればよいですか?

  26. 26

    ユーザーが検索ボックスに入力したテキストでオブジェクトの配列をフィルタリングするにはどうすればよいですか?

  27. 27

    Laravel検索フィルター機能のクエリステートメントを作成するにはどうすればよいですか?

  28. 28

    3文字入力した場合のみフィルター/検索バー検索を行うにはどうすればよいですか?

  29. 29

    検索フィールドがクリアされたときにアイテムを非表示にするにはどうすればよいですか?

ホットタグ

アーカイブ