2011-10-12 25 views
8

我基本上想了解LinkMovementMethod类。我有一个图像里面的编辑文本,需要点击。所以我使用LinkMovementMethod.getInstance编辑文本。但是由于这个LinkMovementMethod对象,复制,剪切,粘贴等编辑文本的上下文菜单(长按)选项不可见。另外我无法将光标定位在编辑文本中。不知何故光标正在隐藏。Android:使用LinkMovementMethod编辑文本

在编辑文本中使用LinkMovementMethod是否正确,或者是否需要为游标和上下文菜单问题编写自定义LinkMovementMethod类。

 EditText editText = (EditText)findViewById(R.id.text); 
    editText.setMovementMethod(LinkMovementMethod.getInstance()); 

-Regards, 罗恩..

+0

嗨!你解决了这个问题吗?我很有兴趣回答。谢谢! – lubart

+0

@lubart不,我仍然面临同样的问题。从android编辑文本的源代码看来,android在复制文本的过程中只复制文本而不复制图像。在LinkMovementMethod期间光标不可见也仍然是一个谜。 – Ron

+0

有没有更新?使用setMovementMethod()时,我无法使光标可见。 – exception01

回答

2

你不应该与可编辑的文本使用LinkMovementMethod。 LinkMovementMethod是一种移动方法,可让您在链接之间移动......这不是您想要的文本编辑器,因为您应该使用移动方法来移动光标以进行编辑。

您期望如何处理可编辑文本中的链接?当你有可编辑的文本时,点击文本将光标放在该点上进行编辑。它不打开链接。这是两件相互矛盾的事情。如果您想要采取其他行为,您需要自定义文本视图来做一些特别的事情,并弄清楚如何在编辑链接文本和打开链接文本之间消除歧义(例如Google Docs会向您显示一个弹出窗口如果你不想编辑它,选择打开它)。但是你需要自己编写代码,在当前框架中没有实现这一点的神奇内置的东西。

0

一种方式是extends EditText

import android.content.Context; 
import android.text.Layout; 
import android.text.style.ImageSpan; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.EditText; 

public class Edit extends EditText { 

    public Edit(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public Edit(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public Edit(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     boolean b = super.onTouchEvent(event); 

     int x = (int) event.getX(); 
     int y = (int) event.getY(); 

     x -= getTotalPaddingLeft(); 
     y -= getTotalPaddingTop(); 

     x += getScrollX(); 
     y += getScrollY(); 

     Layout layout = getLayout(); 
     int line = layout.getLineForVertical(y); 
     int off = layout.getOffsetForHorizontal(line, x); 

     setSelection(off); 

     /** 
     * get you interest span 
     */ 
     ImageSpan[] link = getText().getSpans(off, off, ImageSpan.class); 
     System.out.println("---link---" + link.length); 
     if (link.length != 0) { 
      String src = link[0].getSource(); 
      System.out.println("---src---" + src); 
      return true; 
     } 
     return b; 
    } 
}