I am making an app that involves coding and I need edittext to recognize if the word typed was 'something' then depending if it is registered to be colored, it will color the word. Here is what I want to do, when the user is typing and types 'function' I want it to automatically highlight. Same goes to any other 'function' word, '()', ' " ', and many other words the user types.
1 Answer
You can accomplish this by using a TextWatcher like so:
editText.addTextChangedListener(new TextWatcher() {
final String FUNCTION = "function";
@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) {
int index = s.toString().indexOf(FUNCTION);
if (index >= 0) {
s.setSpan(
new ForegroundColorSpan(Color.CYAN),
index,
index + FUNCTION.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
});
4 Comments
user3055552
I really appreciate for you taking your time in making this example but I tried to use it and when I start typing the word is not highlighted.
user3055552
Never mind it works perfectly all I changed was if (index >= 0) and now it works like a charm!! THANKS!!
Krylez
You're welcome and thanks for finding the mistake (fixed now). Note that this will only catch the first occurrence of the word, but it's not hard to figure out how to highlight all occurrences.
user3055552
Is there a way to get rid of the highlighting when I write between {} ?
==to compare value of Strings, even in example. Useequalsinstead.