【发布时间】:2016-05-17 23:42:26
【问题描述】:
我正在开发一个用户可以将内容发布到提要的应用程序。在我的编辑文本(用于撰写)中,文本颜色为灰色。但是,当用户键入哈希标签时,例如#help 我需要在他们键入时将该文本着色为黑色,因此当用户键入“#”时,文本必须着色为黑色,直到他们开始一个新单词,然后文本颜色需要恢复为灰色。
我一直在尝试使用文本观察器和可扩展的字符串来着色。
这是我使用 textwatcher onTextChanged 所做的事情
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Remove Text watcher to prevent infinite look
mTextField.removeTextChangedListener(contentFieldWatcher);
String startChar = null;
startChar = Character.toString(s.charAt(start));
L.i(getClass().getSimpleName(), "CHARACTER OF NEW WORD: " + startChar);
if (startChar.equals("#")) {
tagCheck(s.toString().substring(start), start, start + count);
}
}
tagCheck方法
private void tagCheck(String s, int start, int end) {
mSpannable.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.black_colour)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mSpannable 是一个 Spannable。
这个方法的问题是'#'显示为startChar,但是当用户输入下一个字符(符号或字母)时,它会显示为startChar。好像用户键入了 santa - 's' 仍然是 startChar。所以我面临的问题是他如何在用户键入主题标签时为文本动态着色。
所以普通字母可以正常工作,但是当你使用符号时它就不行了。我希望这个问题很清楚..我已经看了几天了,一切都变得模糊了:)
【问题讨论】:
-
我在 kotlin 中编写了一个自定义的 EditText 类来实现这一点,希望对某人有所帮助; stackoverflow.com/a/57481803/2522797
标签: android android-edittext textwatcher spannable