2011-10-12 21 views
8

私は基本的にLinkMovementMethodクラスについて理解したいと思っています。私はクリック可能でなければならない編集テキストの中にイメージを持っています。だから、私はLinkMovementMethod.getInstanceを使ってテキストを編集しました。しかし、このLinkMovementMethodオブジェクトのために、コピー、切り取り、貼り付けのようなテキストを編集するためのコンテキストメニュー(長押し)オプションは表示されません。また、私は編集テキストにカーソルを置くことができません。何とかカーソルが隠れています。Android:LinkMovementMethodを使ってテキストを編集

編集テキストで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は、テキストエディタでは望んでいないリンク間を移動できる移動方法です。編集のためにカーソルを動かす移動方法を使用する必要があるからです。

編集可能なテキストのリンクではどうしますか?編集可能なテキストがある場合、そのテキストをタップすると、そのポイントにカーソルが置かれて編集されます。それはリンクを開きません。これらは2つの相反するものです。他にもいくつかの動作が必要な場合は、テキストビューをカスタマイズして何か特別なことを行う必要があります。リンクテキストの編集と開きを明確にする方法を理解しておく必要があります(たとえば、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; 
    } 
}