Android Edittext可扩展问题
每次使用AfterTextChange方法编辑文本时,我都会检查是否输入了一些特殊字符串(来自functionlist变量),然后更改该字符串的特殊颜色。代码如下Android Edittext可扩展问题,android,android-edittext,spannable,spanned,Android,Android Edittext,Spannable,Spanned,每次使用AfterTextChange方法编辑文本时,我都会检查是否输入了一些特殊字符串(来自functionlist变量),然后更改该字符串的特殊颜色。代码如下 for(String s:functionList) { final Pattern p = Pattern.compile(s); final Matcher matcher = p.matcher(inputStr); while(matcher.find())
for(String s:functionList)
{
final Pattern p = Pattern.compile(s);
final Matcher matcher = p.matcher(inputStr);
while(matcher.find())
{
//if(matcher.end() - matcher.start()== s.length())
inputStr.setSpan(new ForegroundColorSpan(Color.parseColor(highlightColor)),
matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
我不使用Html.FromHtml方法的原因是;它迫使我使用setText方法来更改光标位置,而且由于我的edittext也从按钮(按钮称为setText)更改为软键盘,所以setText方法破坏光标位置,因为按钮将光标位置更改为0,即使它不是!!!!因此,我不能用软键盘在中间添加一些东西(当我尝试添加时,CurrPosits总是设置为0)。这就是为什么我必须使用Spanable
无论如何,我的问题是,例如,我的一个特殊文本是“日志”。。当我输入日志时,它工作正常(log),当使用空格字符追加日志(log log)时,它再次工作正常,但是当我从第二个日志中删除g时,第一个日志颜色也消失了(log lo)这是不应该发生的。想象一下粗体原木的颜色
为什么会发生这种情况?如果我正确理解您的意图,您应该尝试以下方法:
edit.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
Spannable inputStr = (Spannable)s;
for (String function : functionList)
{
for (ForegroundColorSpan old : inputStr.getSpans(start, inputStr.length(), ForegroundColorSpan.class))
inputStr.removeSpan(old);
final Pattern p = Pattern.compile(function);
final Matcher matcher = p.matcher(inputStr);
while (matcher.find())
inputStr.setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) { }
});
似乎您的跨度看起来像(在类似html的语法中):LogLog logWhen i settext cursor position为零,直到用户使用软件键盘输入。他们可以用两种方式输入。Html=setText