Android:在SpannableStringBuilder中添加单词?

时间:2014-06-16 19:24:03

标签: android colors textview spannablestring

我正在做一些事情,我的最终目标是

一个。 TextView中有不同颜色的单词

B中。从用户那里获取输入并将该单词放入具有特定颜色的TextView

http://puu.sh/9wpuU/fcc558a48a.png

所以我尝试做的是在我的警报构建器的OK按钮中,我使用了SpannableStringBuilder,附加了新的用户输入文本,并将该范围设置为某种颜色。但是它删除了我之前的所有颜色跨度(我假设因为你在SpannableStringBuilder中一次只能有一个跨度?)任何方法来解决这个问题?这是我试过的。现在编辑整个班级

public class WritingScreen extends Activity {
String title;
String text;
String userInput;
TextView story;
SpannableStringBuilder sb;
ForegroundColorSpan fcs;
int colorTracker;
int currentCharCount;
int nextCharCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.writing_screen);
    story = (TextView) findViewById(R.id.storyText);
    sb = new SpannableStringBuilder(story.getText().toString());
    fcs = new ForegroundColorSpan(Color.rgb(255, 0, 0));
    currentCharCount = story.getText().length();


}
public void addTextClick(View v){
    final EditText input = new EditText(this);
    new AlertDialog.Builder(this)
            .setTitle("Input Word")
            .setView(input)
            .setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(
                                DialogInterface dialog, int whichButton) {
                            String value = input.getText().toString().trim();
                            value = " " + value;
                            sb = new SpannableStringBuilder(story.getText());
                            sb.append(value);
                            nextCharCount = sb.length();
                            sb.setSpan(fcs, currentCharCount, nextCharCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                            story.setText(sb);
                            currentCharCount = nextCharCount;




                        }
                    })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int whichButton) {

                        }
                    })
            .show();

    }

}

这给了我这个

http://puu.sh/9wq7z/7b7fb2f909.jpg

当我连续输入OK jj meh时。我希望他们都能保持我给每个单词分配的颜色。任何想法?

1 个答案:

答案 0 :(得分:2)

首先,story.getText().toString()会将当前的Spannable转换为String,从而丢失所有标记信息。您应该使用sb.append(story.getText())代替。

其次,您必须每次创建一个新Span - 来自setSpan()的代码,如果在构建器中已找到相同的范围,它会被改变。这可能是您丢失之前格式的原因。

例如:

int[] colors = new int[] { Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW };
ForegroundColorSpan fcs = new ForegroundColorSpan(colors[new Random().nextInt(colors.length)]);

SpannableStringBuilder sb = new SpannableStringBuilder(mTextView.getText());
int currentCharCount = sb.length();
sb.append(mEditText.getText().toString().trim());
int nextCharCount = sb.length();

sb.setSpan(fcs, currentCharCount, nextCharCount, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(sb);