0

我创建了一个 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 实际上,文本选择在我的手机上以横向模式工作,但在模拟器上却不行。

4

1 回答 1

2

刚刚想通了。有问题的代码是richTextView.setMovementMethod(LinkMovementMethod.getInstance());

所以我只是删除了它。它使链接无响应,但我真的不需要链接,所以没关系。

以这种方式使用,setMovementMethod由于某种原因完全阻止了触摸事件的选择(我必须深入研究源以找出确切原因)。

自我注意:在完全理解之前不要添加代码。

于 2012-10-13T15:48:48.593 回答