如何突出显示EditText中的多个单词?

如何突出显示EditText中的多个单词?,第1张

概述目前我正在开发Spelling&语法检查应用程序.它有EditText,用户可以在其中输入文本和文本.单击按钮应用程序时,一个名为“检查文本”的按钮将调用LanguageToolAPI来检查文本&返回结果的JSON响应.以下是app:的屏幕截图这是我迄今为止尝试突出显示多个单词的代码,但此代码仅突出显示

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

以下是app:

的屏幕截图

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

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(或子类button,Edittext等).

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 text styles和one other

总结

以上是内存溢出为你收集整理的如何突出显示EditText中的多个单词?全部内容,希望文章能够帮你解决如何突出显示EditText中的多个单词?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1101766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存