我创建了一个 EditText 并添加了一些包含格式的文本,如下面的代码所示:
EditText richTextView = (EditText)findViewById(R.id.rich_text);
// this is the text we'll be operating on
SpannableStringBuilder text = new SpannableStringBuilder("Lorem ipsum dolor sit amet");
// make "Lorem" (characters 0 to 5) red
text.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);
// make "ipsum" (characters 6 to 11) one and a half time bigger than the textbox
text.setSpan(new RelativeSizeSpan(1.5f), 6, 11, 0);
// make "dolor" (characters 12 to 17) display a toast message when touched
final Context context = this;
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View view) {
Toast.makeText(context, "dolor", Toast.LENGTH_LONG).show();
}
};
text.setSpan(clickableSpan, 12, 17, 0);
// make "sit" (characters 18 to 21) struck through
text.setSpan(new StrikethroughSpan(), 18, 21, 0);
// make "amet" (characters 22 to 26) twice as big, green and a link to this site.
// it's important to set the color after the URLSpan or the standard
// link color will override it.
text.setSpan(new RelativeSizeSpan(2f), 22, 26, 0);
text.setSpan(new ForegroundColorSpan(Color.GREEN), 22, 26, 0);
// make our ClickableSpans and URLSpans work
richTextView.setMovementMethod(LinkMovementMethod.getInstance());
// shove our styled text into the TextView
richTextView.setText(text, BufferType.EDITABLE);
我的问题是运行程序时文本不可选择(在模拟器和我自己的设备上都试过)。如果我点击除“dolor”之外的任何单词,则不会出现光标,但如果我输入,它会从“Lorem”之前开始输入。但是,如果我单击“dolor”,它会选择单词并且我可以替换它(但我不能在没有替换的情况下输入)。
我无法选择单词的任何其他部分,也无法将光标放在我想要的位置(它甚至不显示)。
我想知道如何获得像使用普通文本而不是 SpannableString 或 SpannableStringBuilder 时出现的那些普通文本选择功能?(我都试过了)如果我使用纯文本,我可以选择任何单词的任何部分并从那里开始输入文本。
Edit1 文本选择在横向模式下有效,但在纵向模式下无效。所以代码在某种程度上是有效的......
Edit2 实际上,文本选择在我的手机上以横向模式工作,但在模拟器上却不行。