2011-10-12 13 views
8
temelde yaklaşık LinkMovementMethod sınıfını anlamak isteyen

için LinkMovementMethod kullanarak. Tıklanabilir olması gereken metin içinde bir Görüntü var. Bu yüzden metin düzenlemek için LinkMovementMethod.getInstance kullandım. kopyalama, kesme, yapıştırma gibi düzenleme metin için bağlam menüsünü (uzun basın) seçenekleri nesne LinkMovementMethod bu çünkü görünmez. Ayrıca, imleci düzenleme metnine yerleştiremiyorum. Bir şekilde imleç saklanıyor.Android: düzenlemek metin

düzenleme metninde LinkMovementMethod kullanılacak doğru yaklaşım mı yoksa imleç ve içerik menüsü sorunu için özel bir LinkMovementMethod sınıfı yazmak gerekir.

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

-Regards, Ron ..

+0

Hi! Bu sorunu çözdünüz mü? Cevabım ilginç. Teşekkürler! – lubart

+0

@lubart Hayır, hala aynı sorunla karşı karşıyayım. Android düzenleme metninin kaynak kodundan, metin düzenleme metninde bir kopya sırasında android sadece metin ve görüntüyü kopyalar gibi görünüyor. Ayrıca LinkMovementMethod sırasında görünmez imleç hala bir gizem. – Ron

+0

Herhangi bir güncelleme var mı? SetMovementMethod() kullanırken imleci görünür yapamıyorum. – exception01

cevap

2

Sen düzenlenebilir metin ile LinkMovementMethod kullanmamalısınız. LinkMovementMethod düzenleme için etrafında imleci hareket hareket yöntemi kullanılarak edilmesi gerektiğinden, bir metin editörü istediğini olmadığı ... Eğer bağlantıları arasında dolaşmak sağlayan bir hareket yöntemidir.

Ne düzenlenebilir metin olarak bağlantıları ile ilgisi bekliyorsunuz? Düzenlenebilir metniniz olduğunda, metne dokunmak, imleci düzenlemek için bu noktaya getirir. Bağlantıyı açmıyor. Bunlar birbiriyle çelişen iki şey. Eğer başka bir davranışa sahip olmak istiyorsanız, özel bir şey yapmak ve bağlantı metnini düzenleyip açmadan arasındaki belirsizliği olacak anlamaya metin görünümü özelleştirmek gerekir (örneğin Google Dokümanlar size bir pop-up gösterir Düzenlemek istemiyorsanız açmak için seçin). Ama bunu kendiniz kodlamanız gerekecek, mevcut çerçevede bunu uygulayan sihirli yerleşik bir şey yoktur.

0

Bir yolları 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; 
    } 
} 
İlgili konular