我创建了一个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 实际上,文本选择在我的手机上以横向模式工作,但不在模拟器上。
答案 0 :(得分:2)
刚想通了。有问题的代码是richTextView.setMovementMethod(LinkMovementMethod.getInstance());
所以我把它删除了。它使链接无响应,但我不需要链接,所以没关系。
以这种方式使用,setMovementMethod
由于某种原因完全阻止了触摸事件的选择(我将不得不深入挖掘来源以确定原因)。
自我注意:在完全理解之前不要添加代码。