<i id='lqskK'><tr id='lqskK'><dt id='lqskK'><q id='lqskK'><span id='lqskK'><b id='lqskK'><form id='lqskK'><ins id='lqskK'></ins><ul id='lqskK'></ul><sub id='lqskK'></sub></form><legend id='lqskK'></legend><bdo id='lqskK'><pre id='lqskK'><center id='lqskK'></center></pre></bdo></b><th id='lqskK'></th></span></q></dt></tr></i><div id='lqskK'><tfoot id='lqskK'></tfoot><dl id='lqskK'><fieldset id='lqskK'></fieldset></dl></div>
    <tfoot id='lqskK'></tfoot>
      <bdo id='lqskK'></bdo><ul id='lqskK'></ul>
    <legend id='lqskK'><style id='lqskK'><dir id='lqskK'><q id='lqskK'></q></dir></style></legend>

    1. <small id='lqskK'></small><noframes id='lqskK'>

    2. 如何在 EditText 中突出显示多个单词?

      时间:2023-05-28

        <bdo id='XKTsS'></bdo><ul id='XKTsS'></ul>
        1. <small id='XKTsS'></small><noframes id='XKTsS'>

            <i id='XKTsS'><tr id='XKTsS'><dt id='XKTsS'><q id='XKTsS'><span id='XKTsS'><b id='XKTsS'><form id='XKTsS'><ins id='XKTsS'></ins><ul id='XKTsS'></ul><sub id='XKTsS'></sub></form><legend id='XKTsS'></legend><bdo id='XKTsS'><pre id='XKTsS'><center id='XKTsS'></center></pre></bdo></b><th id='XKTsS'></th></span></q></dt></tr></i><div id='XKTsS'><tfoot id='XKTsS'></tfoot><dl id='XKTsS'><fieldset id='XKTsS'></fieldset></dl></div>

                  <tbody id='XKTsS'></tbody>
              • <tfoot id='XKTsS'></tfoot><legend id='XKTsS'><style id='XKTsS'><dir id='XKTsS'><q id='XKTsS'></q></dir></style></legend>

                本文介绍了如何在 EditText 中突出显示多个单词?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                目前我正在开发 Spelling &语法检查应用程序.它有 EditText 用户可以在其中输入文本和单击按钮应用程序时,一个名为检查文本"的按钮将调用 LanguageTool API 来检查文本和返回带有结果的 JSON 响应.

                Currently I'm developing Spelling & Grammar checking app. It has EditText where user can input text & one button called "Check Text " upon click on button app will call LanguageTool API to check text & returns JSON response with result .

                这是应用程序的屏幕截图:

                Here is screenshot of app :

                这是我迄今为止尝试突出显示多个单词的代码,但此代码仅突出显示我创建的数组中的最后一个单词:

                Here is code which I have tried so far for highlighting multiple words but this code only highlights last word from array which I have created:

                for (int i = 0; i < errorStrings.size(); i++) {
                
                // Here textToCheck is EditText & errorStrings is ArrayList of type WrongString class which i have created to hold Error string , offset & length.
                
                Spannable wordtoSpan = new SpannableString(texttoSend);
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.BLUE),errorStrings.get(i).getOffset(),
                                                        (errorStrings.get(i).getOffset()+errorStrings.get(i).getLength()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                                            textToCheck.setText(wordtoSpan);
                }
                

                推荐答案

                我写了一个简单的方法,可以让你传递TextView(或子类ButtonEdittext 等).

                I have wrote a simple method that allow you pass TextView (or child classes Button, Edittext etc.).

                1.如果您想突出显示段落中查找单词中的文本.您可以使用以下方法.

                setHighLightedText(yourTextView_Edittext_Button, "a");
                

                这会给你这样的结果.

                    /**
                     * use this method to highlight a text in TextView
                     * @param tv TextView or Edittext or Button or child of TextView class
                     * @param textToHighlight Text to highlight
                     */
                    public void setHighLightedText(TextView tv, String textToHighlight) {
                        String tvt = tv.getText().toString();
                        int ofe = tvt.indexOf(textToHighlight, 0);
                        Spannable wordToSpan = new SpannableString(tv.getText());
                        for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
                            ofe = tvt.indexOf(textToHighlight, ofs);
                            if (ofe == -1)
                                break;
                            else {
                                wordToSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), ofe, ofe + textToHighlight.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                                tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
                            }
                        }
                    }
                

                <强>2.如果您想制作可点击的突出显示文本(例如单击条款和条件文本),请使用以下代码:

                 setClickableHighLightedText(yourTextView_Edittext_Button, "go to settings", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO: do your stuff here 
                        }
                    });
                

                这会给你这样的结果

                /**
                 * use this method to set clickable highlighted a text in TextView
                 *
                 * @param tv              TextView or Edittext or Button or child of TextView class
                 * @param textToHighlight Text to highlight
                 */
                public void setClickableHighLightedText(TextView tv, String textToHighlight, View.OnClickListener onClickListener) {
                    String tvt = tv.getText().toString();
                    int ofe = tvt.indexOf(textToHighlight, 0);
                    ClickableSpan clickableSpan = new ClickableSpan() {
                        @Override
                        public void onClick(View textView) {
                            if (onClickListener != null) onClickListener.onClick(textView);
                        }
                
                        @Override
                        public void updateDrawState(TextPaint ds) {
                            super.updateDrawState(ds);
                            ds.setColor(0xff0000ff);
                            ds.setUnderlineText(true);
                        }
                    };
                    SpannableString wordToSpan = new SpannableString(tv.getText());
                    for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
                        ofe = tvt.indexOf(textToHighlight, ofs);
                        if (ofe == -1)
                            break;
                        else {
                            wordToSpan.setSpan(clickableSpan, ofe, ofe + textToHighlight.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                            tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
                            tv.setMovementMethod(LinkMovementMethod.getInstance());
                        }
                    }
                }
                

                这是一种解决方法,您可以根据需要自定义跨度.一些很好的教程 Android 文本样式 和 另一个

                This is a workaround, you can customise spans according to your need. Some good tutorials Android text styles and one other

                这篇关于如何在 EditText 中突出显示多个单词?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:创建Activity时如何使EditText不聚焦 下一篇:带有芯片的 Android AutoCompleteTextView

                相关文章

              • <legend id='bNwOX'><style id='bNwOX'><dir id='bNwOX'><q id='bNwOX'></q></dir></style></legend>

                1. <small id='bNwOX'></small><noframes id='bNwOX'>

                  <i id='bNwOX'><tr id='bNwOX'><dt id='bNwOX'><q id='bNwOX'><span id='bNwOX'><b id='bNwOX'><form id='bNwOX'><ins id='bNwOX'></ins><ul id='bNwOX'></ul><sub id='bNwOX'></sub></form><legend id='bNwOX'></legend><bdo id='bNwOX'><pre id='bNwOX'><center id='bNwOX'></center></pre></bdo></b><th id='bNwOX'></th></span></q></dt></tr></i><div id='bNwOX'><tfoot id='bNwOX'></tfoot><dl id='bNwOX'><fieldset id='bNwOX'></fieldset></dl></div>

                  <tfoot id='bNwOX'></tfoot>
                    • <bdo id='bNwOX'></bdo><ul id='bNwOX'></ul>