在MultpuAutocompletTexView上打字时我想制作一些以@开头的特殊单词,想要用一些颜色单独制作这个单词,我该怎么做才能做到这一点。
因此,当我输入@时,该单词应为彩色文本。
答案 0 :(得分:1)
您应该使用textWatcher和spannable文本的组合 使用文本观察器查看用户正在键入的内容并使用spannable text为textView或EditText中的部分文本提供特殊颜色或格式
可扩展文本的好教程:
https://medium.com/google-developers/spantastic-text-styling-with-spans-17b0c16b4568
和文本观察者的文档:
答案 1 :(得分:1)
将TextWatcher与Spanable文本一起使用,每次需要检查最后一个输入单词时,表示最后一个单词的0索引为@,如果是,则为EditText应用Spanable。 请看下面的代码。
在公共级别定义此变量
int beforeChangeSize = 0, afterChangeSize = 0, cusrsorPos = 0, posOflastSpace = 0;
String lastcursorSubString = "";
@Override
public void afterTextChanged(Editable editable) {
if (afterChangeSize > beforeChangeSize) {
cusrsorPos = 0;
posOflastSpace = 0;
lastcursorSubString = "";
cusrsorPos = txt_search.getSelectionStart();
String sudString = txt_search.getText().toString().substring(0, cusrsorPos);
posOflastSpace = sudString.lastIndexOf(" ");
posOflastSpace = (posOflastSpace == -1) ? 0 : posOflastSpace;
lastcursorSubString = sudString.substring(posOflastSpace, cusrsorPos).trim();
if ((lastcursorSubString.length() > 1 &&(lastcursorSubString.charAt(0) == '@') {
textlable.setText(""+lastcursorSubString);
// txt_search.getText().replace(posOflastSpace+1, cusrsorPos, Html.fromHtml("<font color=#FE642E>" + lastcursorSubString + "</font>"));
// txt_search.showDropDown();
editable.setSpan(new ForegroundColorSpan(Color.RED),
posOflastSpace+1,
cusrsorPos,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
答案 2 :(得分:0)
您可以添加自己的TextChangedListener
并实施onTextChanged
方法
myAutoTxtView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence text, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence text, int start, int before, int count) {
if (text.charAt(start) == '@') {
//change color
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
答案 3 :(得分:-1)
此代码更改颜色 - 在上面的文本更改侦听器中使用它(如果你愿意,你需要将它的kotlin修改为Java)
//get text
val str = editText.text.toString()
//get last word
val splitStr = str.trim { it <= ' ' }.split("\\s+".toRegex()).dropLastWhile {
it.isEmpty() }.toTypedArray()
val ColorWord = splitStr.last()
//get the sentence without the last word
val textButLast = str.substring(0, str.lastIndexOf(" "))
//change the last word color
val LastWord = "<font color='#EE0000'>$ColorWord</font>"
//put the last word with the sentence again
editText.setText(Html.fromHtml(textButLast + LastWord))