在EditText中无法选择SpannableString(Builder)

时间:2012-10-13 13:41:15

标签: android

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

1 个答案:

答案 0 :(得分:2)

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

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

以这种方式使用,setMovementMethod由于某种原因完全阻止了触摸事件的选择(我将不得不深入挖掘来源以确定原因)。

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