不同颜色的的EditText在Android中(Different colors at EditTe

2019-07-17 17:52发布

我试图使一个EditText多种颜色的文本。 例如,如果我的文字是:“这是美好的一天。”,这可能使“这是一个”句子的一部分,绿色和红色的休息?

Answer 1:

我用类似的东西,使我的绿颜色的某些部分:

final String text = "Some Text";
Spannable modifiedText = new SpannableString(text);
modifiedText.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.green)), 0, lengthYouWant, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(modifiedText);


Answer 2:

你可以使用spannables 。

Spannable spannable = yourText.getText();
spannable .setSpan(new BackgroundColorSpan(Color.argb(a, r, g, b)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);


Answer 3:

是。 您将需要创建一个Spannable对象(无论是SpannedStringSpannedStringBuilder ),然后设置跨度在其申请你所寻求的颜色。

例如,从下面的方法此示例项目需要的内容TextView ,搜索用户输入的字符串,并标记了所有出现的紫色背景颜色,可以删除以前所有的标记:

  private void searchFor(String text) {
    TextView prose=(TextView)findViewById(R.id.prose);
    Spannable raw=new SpannableString(prose.getText());
    BackgroundColorSpan[] spans=raw.getSpans(0,
                                             raw.length(),
                                             BackgroundColorSpan.class);

    for (BackgroundColorSpan span : spans) {
      raw.removeSpan(span);
    }

    int index=TextUtils.indexOf(raw, text);

    while (index >= 0) {
      raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
          + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      index=TextUtils.indexOf(raw, text, index + text.length());
    }

    prose.setText(raw);
  }

在你的情况下,改变前景色将使用ForegroundColorSpan代替BackgroundColorSpan

事情变得有点棘手与EditText ,在用户可以编辑文本,你需要选择你的标志,以满足你想要的规则。 例如, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE会说:

  • 在跨区区中间输入的字符得到跨度的效果(例如,前景色)
  • 字符后,立即进入前或跨区区域之后被认为是跨区区域之外,因此没有得到跨度的影响


Answer 4:

我有这样的麻烦了。 几个小时后,我想通了,如何处理它:

  mYourTextView.addTextChangedListener(new TextWatcher() {

        private String oldContent = "";

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            final String newContent = mYourTextView.getText().toString();

            if (newContent.length() > 10 && !oldContent.equals(newContent)) {
                oldContent = newContent;
                mYourTextView.setText(Html.fromHtml(
                        String.format("%s", "<font color='#000000'>" + newContent.substring(0, 10) + "</font>")
                                + "<font color='#ff0000'>" + newContent.substring(10, newContent.length()) + "</font>"));
                Log.d("onTextChanged", "Start : " + start);

                //move cursor after current character
                mYourTextView.setSelection(start + 1 > mYourTextView.getText().toString().length()
                        ? start : start + 1);

            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

此代码使黑色前10个字符,并在红色的跟随字符。 我们需要的变量oldContent防止循环无穷,因为当调用的EditText的setText(),然后onTextChanged



文章来源: Different colors at EditText in Android