【问题标题】:edittext with different color in android在android中具有不同颜色的edittext
【发布时间】:2016-02-10 10:36:32
【问题描述】:

我在编辑文本时遇到了一些问题,实际上我需要的是输入的第 10 个字母应该是红色的,然后输入的字母应该是灰色的。我做了颜色改变,问题是当我输入第 11 个字母时,之前输入的所有 10 个字母的颜色也被改变了。我想保持第 10 个字母的颜色不变,只有在第 10 个字母之后才应该改变颜色。请帮帮我。

this is my code, i want user to enter the text in live, after he enter a message of 10 letter,the 11th letter colour should be changed

【问题讨论】:

标签: android


【解决方案1】:

试试这个代码(我已经测试过它并按预期工作):

final EditText input = (EditText) findViewById(R.id.my_edittext);
input.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            Spannable spannable = input.getText();
            if (!TextUtils.isEmpty(s) && s.length() > 9){
                spannable.setSpan(new ForegroundColorSpan(ContextCompat.getColor(MainActivity.this, R.color.my_color_red)),
                        0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }

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

【讨论】:

  • 非常感谢。你真的帮了大忙。
  • 最佳解决方案。谢谢!
【解决方案2】:

尝试使用Spannable

Spannable spannable = myEditText.getText();
spannable.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.red)), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

【讨论】:

  • 收到此错误。 java.lang.IndexOutOfBoundsException: setSpan (0 ... 11) 结束超过长度 0
  • 在调用此代码之前,您需要将文本设置为编辑文本。在使用此代码之前检查其长度。仅当文本长度 >= 10 时才应调用此方法。应使用文本观察器侦听器。
  • editText = (EditText) findViewById(R.id.edtext); editText.addTextChangedListener(passwordWatcher); }private final TextWatcher passwordWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged (可编辑){ if(s.toString().length()>10) { editText.setTextColor(getResources().getColor(android.R.color.holo_blue_dark)); } }
  • 你能帮帮我吗
【解决方案3】:

为此使用Spannable字符串

SpannableStringBuilder builder = new SpannableStringBuilder();

SpannableString redSpannable= new SpannableString("yourstring");
redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, 11, 0);
builder.append(redSpannable);

SpannableString whiteSpannable= new SpannableString("next string");
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 11, 20, 0);
builder.append(whiteSpannable);

editText.setText(builder, BufferType.SPANNABLE);

【讨论】:

  • 我需要用户输入文本,我想要编辑文本而不是文本视图。文本应手动输入。
猜你喜欢
  • 2017-11-09
  • 2012-05-05
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2011-04-13
  • 2010-12-04
相关资源
最近更新 更多