2011-10-12 16 views
8

Básicamente quiero entender acerca de LinkMovementMethod clase. Tengo una Imagen dentro de texto de edición que necesita poder hacer clic. Así que utilicé LinkMovementMethod.getInstance para editar el texto. Pero debido a este objeto LinkMovementMethod, las opciones del menú contextual (pulsación larga) para editar texto como copiar, cortar y pegar no están visibles. Además, no puedo colocar el cursor en el texto de edición. De alguna manera el cursor se está escondiendo.Android: utilizando LinkMovementMethod para editar el texto

¿Es el método correcto para utilizar LinkMovementMethod en editar texto o es necesario escribir una clase personalizada LinkMovementMethod para el cursor y el problema del menú contextual.

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

-Regards, Ron ..

+0

Hola! ¿Has resuelto este problema? Soy interesante en respuesta. ¡Gracias! – lubart

+0

@lubart No, todavía estoy enfrentando el mismo problema. A partir del código fuente de texto de edición de Android, parece que Android copia solo el texto y no la imagen durante una copia en el texto de edición. También el cursor no visible durante LinkMovementMethod sigue siendo un misterio. – Ron

+0

¿Alguna actualización? No puedo hacer visible el cursor cuando uso setMovementMethod(). – exception01

Respuesta

2

No use LinkMovementMethod con el texto editable. LinkMovementMethod es un método de movimiento que le permite moverse entre los enlaces ... que no es lo que quiere para un editor de texto, ya que debe usar el método de movimiento que mueve el cursor para editarlo.

¿Qué esperas hacer con los enlaces en texto editable? Cuando tiene texto editable, tocar el texto coloca el cursor en ese punto para editarlo. No abre el enlace. Estas son dos cosas conflictivas. Si desea tener algún otro comportamiento, deberá personalizar la vista de texto para hacer algo especial y descubrir cómo va a desambiguar entre editar el texto del enlace y abrirlo (por ejemplo, Google Docs muestra una ventana emergente para seleccione abrirlo si no desea editarlo). Pero tendrá que codificar esto usted mismo, no hay nada mágico incorporado que implemente esto en el marco actual.

0

Una manera es 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; 
    } 
} 
Cuestiones relacionadas