gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:11:35 26 4
gpt4 key购买 nike

目前我正在开发拼写和语法检查应用程序。它有 EditText,用户可以在其中输入文本,点击按钮应用程序将调用 LanguageTool API 来检查文本并返回 JSON 响应和结果。

这是应用程序的屏幕截图:enter image description here

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

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 等)。

<强>1。如果您想突出显示文本,例如在段落中查找单词。您可以使用以下方法。

setHighLightedText(yourTextView_Edittext_Button, "a");

这给你这样的结果。

enter image description here

    /**
* 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
}
});

这会给你这样的结果

enter image description 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());
}
}
}

这是一种解决方法,您可以根据需要自定义 span。一些不错的教程Android text stylesone other

关于java - 如何突出显示 EditText 中的多个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com