我正在做一些事情,我的最终目标是
一个。 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时。我希望他们都能保持我给每个单词分配的颜色。任何想法?
答案 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);