2011-10-12 5 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 아니, 아직도 나는 똑같은 문제에 직면 해있다. 안드로이드의 소스 코드에서 텍스트 편집, 안드로이드는 텍스트 만 복사하고 편집 텍스트의 복사본은 이미지가 아닌 것으로 보입니다. 또한 LinkMovementMethod 동안 커서를 볼 수없는 여전히 미스터리입니다. – Ron

+0

업데이트가 있습니까? setMovementMethod()를 사용할 때 커서를 표시 할 수 없습니다. – exception01

답변

2

당신은 편집 가능한 텍스트로 LinkMovementMethod를 사용하지 말아야합니다. LinkMovementMethod는 텍스트 편집기에서 원하는 링크가 아닌 링크 사이를 이동할 수있는 이동 방법입니다. 편집을 위해 커서를 움직이는 이동 방법을 사용해야하기 때문입니다.

편집 가능한 텍스트의 링크로 무엇을 할 것으로 예상하십니까? 편집 가능한 텍스트가있을 때 텍스트를 두드리면 그 지점에 커서가 놓여 편집 할 수 있습니다. 그것은 링크를 열지 않습니다. 이들은 서로 상반되는 두 가지입니다. 다른 행동을 원할 경우 텍스트보기를 맞춤 설정하여 특별한 작업을 수행하고 링크 텍스트 수정과 열기 사이의 모호성을 파악해야합니다 (예 : Google 문서 도구를 사용하면 편집하고 싶지 않으면 열어 선택하십시오.) 그러나 당신은 이것을 스스로 코딩해야 할 것이고, 현재의 틀에서 이것을 구현하는 마법적인 것들은 없다.

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; 
    } 
} 
관련 문제