我有以下问题: 我有一个TextView,还有一个来自StringBuilder的文本,其中有一个标记的单词,这个单词被定义为StringArray。
现在的问题是我不知道如何获取这个特定单词的行。
我知道这种方法可以转到特定的行:
scrollView.post(new Runnable() {
@Override
public void run() {
int y = textView.getLayout().getLineTop(0); //That's the line where the view goes to
scrollView.scrollTo(0, y);
}
});
现在我希望视图不会转到特定的行,而是视图应该转到特定的行,该行可以使用该单词进行更改。
是否有像" getLineTop"这样的命令,所以这不是一行而是一个单词?
由于
修改
int total = 0;
String word_search = Etxt.getText().toString().trim().toLowerCase();
String fullTxt = textView.getText().toString();
String[] array = fullTxt.split("\n");
final String[] markiert = new String[array.length];
String word;
StringBuilder st = new StringBuilder();
for (int i = 0; i < array.length; i++) {
word = array[i];
if (word.toLowerCase().contains(word_search)) {
markiert[i] = word.trim();
st.append("<b><i><font color=\"#035525\">" + markiert[i] + "</font></i></b>");
total++;
} else {
st.append(word);
}
st.append("<br>");
}
textView.setText(Html.fromHtml("" + st));
scrollView.post(new Runnable() {
@Override
public void run() {
int indexOfWord = textView.getText().toString().indexOf(markiert[0]);
int line = textView.getLayout().getLineForOffset(indexOfWord);
int y = textView.getLayout().getLineTop(line);
scrollView.scrollTo(0, y);
}
});
代码
答案 0 :(得分:3)
获取显示指定文本偏移的行号。
所以你现在所需要的只是标记词的起始索引 您可能已经有了这个,或者您可以进行简单的indexOf查找 或者,您可以使用Spannable标记(并设置)单词。
用过:
String wordToLookFor = "Hello";
int indexOfWord = textView.getText().toString().indexOf(wordToLookFor);
int lineNumber = textView.getLayout().getLineForOffset(index);
修改强>
尝试像
String textToFind = Etxt.getText().toString().trim().toLowerCase();
String fullTxt = textView.getText().toString();
SpannableString spannable = new SpannableString(fullTxt);
final int index = fullTxt.indexOf(textToFind);
if(index == -1) {
// text does not contain the word
Toast.makeText(getApplicationContext(), "Text '" + textToFind + "' not found.", Toast.LENGTH_SHORT).show();
}
else {
int lineNum = textView.getLayout().getLineForOffset(index);
int lineStart = textView.getLayout().getLineEnd(lineNum -1);
int lineEnd = textView.getLayout().getLineEnd(lineNum);
// set style to the entire line, as your origional code
spannable.setSpan(new ForegroundColorSpan(Color.parseColor("#035525")), lineStart, lineEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), lineStart, lineEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannable);
textView.post(new Runnable() {
@Override
public void run() {
int line = textView.getLayout().getLineForOffset(index);
int y = textView.getLayout().getLineTop(line);
scrollView.scrollTo(0, y);
}
});
}