目前我正在开发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中的多个单词?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)