我想动态更改 EditText 中的颜色。 具体来说:
按下按钮后,我输入到
EditText
的文本变成红色;(EditText中已有的文本保持其原始颜色)
再次按下按钮后,我输入到
EditText
的文本会变成其他颜色,并且EditText
中已有的文本颜色仍然保留。
您还可以使用以下代码来设置编辑文本的文本颜色
EditText et = (EditText) findViewById(R.id.edit1);
// to set text color using RGB code
et.setTextColor(Color.parseColor("#00ff00"));
使用此代码:
Spannable spannable = youreditText.getText();
spannable .setSpan(new BackgroundColorSpan(Color.argb(a, r, g, b)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
如果您不希望插入的文本着色,但希望索引之间的文本着色,只需使用:
Spannable spannable = youreditText.getText();
spannable .setSpan(new BackgroundColorSpan(Color.argb(a, r, g, b)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
希望这有帮助!
我通过使用 HTML 之类的标签找到了一个简单的解决方案
ImageBtn.setOnClickListener(new OnClickListener() {
@override
public void onClick(View view) {
// TODO Auto-generated method stub
mContentEdit.append("[1;34m [m"); //this is the tag I use
//here I simplely append new tag to the end ,we can also add this tag where cursor is
}
});
为我的 EditText 添加一个 TextWatcher;
mContentEdit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
switch(mInsertIndex){
case 1:
mSelection = mContentEdit.getSelectionStart();
break;
case 2:
mContentEdit.setSelection(mSelection);
break; //recover the cursor's position
}
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
switch (mInsertIndex) {
case 1:
//this is p:Pattern p = Pattern.compile("\\[[\\d{1};]*(3\\d{1})m(.*?)\\[[\\d;]*m");
Matcher m = p.matcher(s.toString());
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb, "<font color=#"+CssUtil.getColor(m.group(1))+">"+"[1;"+m.group(1)+"m"+m.group(2)+"[m"+"</font>");
} //add a tag otherwise the next time we input,color will be gone;
m.appendTail(sb);
mInsertIndex = 2;
mContentEdit.setText(Html.fromHtml(sb.toString()));
break;
//replace tag by html color
case 2:
mInsertIndex = 1;
break;
//avoid recursive message loop
}
}
这段代码非常适合我的应用程序。我可以将 edittext 中的原始文本直接发布到网站,网站将解析 css 颜色的标签;
但是还有缺陷:
1:如果我不想看到标签怎么办? 在我的问题中,我需要的实际上是一个颜色状态机,一旦按下btn,无论你在哪里输入,颜色都会生效。但在我的解决方案中,我必须输入标签。
2:随着输入长度的增长,效率可能会出现问题; 正如你所看到的,使用了正则表达式;
所以,还是期待有大侠来解决我的问题!
您可以将颜色应用于编辑文本,如下所示:
yourEdiText.setTextColor(0xff0000ff);
对于特定情况,您必须输入该代码。