0

我正在开发一个 Android 应用程序。在我的应用程序中,我遇到了一个奇怪的问题。请看一下我的屏幕。在此处输入图像描述

当我从选择框中选择任何东西时,它会在编辑文本中添加两次。

以下是我的edittext代码

snd_txt.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            System.out.println("onTextChanged"+start+"b4"+before+"count"+count);
            if (start>0) {

                    int m=snd_txt.getText().toString().lastIndexOf(".");
                    makeColorText(m,snd_txt.getText().toString().length());

            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });




public void makeColorText(int num,int last) {

    int start=last-44;
    if (start<1){
        start=0;
    }
     SpannableString ss = new SpannableString(snd_txt.getText());

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



    snd_txt.setText(ss);
    snd_txt.setSelection(last);
}

如果我评论snd_txt.setText(ss);声明。edittext 将完美运行。但我不能这样做。我使用该方法在运行时更改编辑文本颜色。一直工作正常..但是在选择预测时会添加两次单词。

任何人有任何想法来解决,请帮助我。

编辑:如何创建带有多色文本的自定义编辑文本..例如:蓝色的当前行和上一个是黑色的。类似的东西

4

2 回答 2

0

通过更改我的代码解决了我的问题。

snd_txt.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if (start>0) {
                 int m=snd_txt.getText().toString().lastIndexOf(".");
         makeColorText(snd_txt.getText().toString().length(),count);    
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
        }
    });

public void makeColorText(int last,int count) {

    int start=last-44;
    if (start<1){
        start=0;
    }

    String s=snd_txt.getText().toString();

    if (count==before_val&count!=1) {

        s=s.substring(0, last-before_val);
        last=last-before_val;
    }

     SpannableString ss = new SpannableString(s);

     ss.setSpan(new ForegroundColorSpan(R.color.Gray_Light), 0, start,0);
     ss.setSpan(new ForegroundColorSpan(Color.BLACK), start, last, 0); 
    // customize ss here
    // ...



         snd_txt.setText(ss);


     before_val=count;


    snd_txt.setSelection(last);
}
于 2012-09-21T05:17:51.853 回答
0

你正在做一个认为可以causes a Exception due to recycling。您正在监视 edittext 的文本更改事件,如果有文本更改,那么您将再次在 EditText 上设置文本,因此您的文本更改事件将再次发生,您将再次设置文本,以便它将继续并且可能会给你堆栈溢出异常或挂起你的 UI。

您应该使用beforeTextChanged事件并修改CharSequence您在参数中得到的。可能这对你有用。

于 2012-09-20T05:44:33.643 回答