如何在EditText中输入彩色文本

时间:2012-02-17 12:55:14

标签: android android-edittext

我想动态更改EditText中的颜色。 具体来说:

按下按钮后,我输入EditText的文字变为颜色为红色;(EditText中已有的文字保持原始颜色)

再次按下按钮后,我输入EditText的文字会变成其他颜色,同样,EditText中已有的文字颜色仍然存在。

4 个答案:

答案 0 :(得分:7)

您还可以使用以下代码设置编辑文本的文本颜色

EditText et = (EditText) findViewById(R.id.edit1);
// to set text color using RGB code
et.setTextColor(Color.parseColor("#00ff00"));

答案 1 :(得分:3)

使用此代码:

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);

希望这有帮助!

答案 2 :(得分:0)

您可以将颜色应用于您的edittext,如:

yourEdiText.setTextColor(0xff0000ff);

并且对于特定情况,您必须放置该代码。

享受。 :)

答案 3 :(得分:0)

我通过使用像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:随着输入长度的增长,效率可能成为问题;    正如你所见,正在使用正则表达式;

所以,仍然期待着一个英雄来解决我的问题!