从 editText 中仅检测和更改 "hello" 文本字体系列
Detect and change only "hello" text font-family from editText
我有一个 editText 框,当用户写 "hello" 我只想更改 "hello" 字体系列更改为斜体,但其他文本字体系列保持不变仅更改 "hello"
String detectText, text;
detectText = "hello";
text = title.getText().toString();
detectText.
你能帮帮我吗?
正如有人所说,您需要一个文本观察器才能在文本更改时进行更改。您还需要 span 才能设置部分文本的样式。这是一种方法:
editText.addTextChangedListener(new TextWatcher() {
private static final String KEYWORD = "hello";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
// Remove previous spans.
for (StyleSpan span : s.getSpans(0, s.length(), StyleSpan.class)) {
s.removeSpan(span);
}
// Add new spans for every occurrence of the keyword.
int i = 0;
while (i != -1) {
i = text.toString().indexOf(KEYWORD, i);
if (i != -1) {
s.setSpan(new StyleSpan(Typeface.ITALIC), i, i + KEYWORD.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
i += KEYWORD.length();
}
}
}
});
文本观察器在编辑的不同时间调用三种方法,但只有在 afterTextChanged
中更改文本才是安全的。在那里,所有以前的样式范围都被删除,然后扫描文本以添加新的。
请注意,如果您打算将其变成更复杂的东西(例如语法荧光笔),性能可能会成为问题。现在,每当用户更改单个字符时,所有跨度都会重新添加。
我有一个 editText 框,当用户写 "hello" 我只想更改 "hello" 字体系列更改为斜体,但其他文本字体系列保持不变仅更改 "hello"
String detectText, text;
detectText = "hello";
text = title.getText().toString();
detectText.
你能帮帮我吗?
正如有人所说,您需要一个文本观察器才能在文本更改时进行更改。您还需要 span 才能设置部分文本的样式。这是一种方法:
editText.addTextChangedListener(new TextWatcher() {
private static final String KEYWORD = "hello";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
// Remove previous spans.
for (StyleSpan span : s.getSpans(0, s.length(), StyleSpan.class)) {
s.removeSpan(span);
}
// Add new spans for every occurrence of the keyword.
int i = 0;
while (i != -1) {
i = text.toString().indexOf(KEYWORD, i);
if (i != -1) {
s.setSpan(new StyleSpan(Typeface.ITALIC), i, i + KEYWORD.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
i += KEYWORD.length();
}
}
}
});
文本观察器在编辑的不同时间调用三种方法,但只有在 afterTextChanged
中更改文本才是安全的。在那里,所有以前的样式范围都被删除,然后扫描文本以添加新的。
请注意,如果您打算将其变成更复杂的东西(例如语法荧光笔),性能可能会成为问题。现在,每当用户更改单个字符时,所有跨度都会重新添加。