如何突出显示EditText中的多个单词? [英] How to highlight Multiple words in 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 .
以下是app的截图:
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
(或子类按钮
, Edittext
等)。
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
}
});
这给你的结果如
< a href =https://i.stack.imgur.com/xuQ6L.jpg =nofollow noreferrer>
/**
* 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中的多个单词?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!