2011-10-12 31 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; 
    } 
}