2011-10-12 12 views
8

W zasadzie chcę zrozumieć o klasie LinkMovementMethod. Mam obraz wewnątrz tekstu edycji, który musi być klikalny. Dlatego użyłem LinkMovementMethod.getInstance do edycji tekstu. Ale z powodu tego obiektu LinkMovementMethod menu kontekstowe (długie naciśnięcie) opcje edycji tekstu, takie jak kopiowanie, wycinanie, wklejanie nie są widoczne. Ponadto nie jestem w stanie ustawić kursora w tekście edycji. W jakiś sposób ukrywa się kursor.Android: używając LinkMovementMethod do edycji tekstu

Czy jest prawidłowe podejście do korzystania z metody LinkMovementMethod w tekście edycji lub czy konieczne jest napisanie niestandardowej klasy LinkMovementMethod dla problemu z kursorem i menu kontekstowego.

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

-Regards, Ron ..

+0

Cześć! Czy rozwiązałeś ten problem? Jestem ciekawa w odpowiedzi. Dzięki! – lubart

+0

@lubart Nie, nadal mam ten sam problem. Z kodu źródłowego tekstu edycji Androida wydaje się, że android kopiuje tylko tekst, a nie obraz podczas kopiowania w tekście edycji. Również kursor niewidoczny podczas LinkMovementMethod jest wciąż zagadką. – Ron

+0

Jakieś aktualizacje? Nie mogę uczynić kursora widocznym podczas używania metody setMovementMethod(). – exception01

Odpowiedz

2

Nie należy stosować LinkMovementMethod z edycji tekstu. LinkMovementMethod to metoda ruchu, która umożliwia poruszanie się między linkami ... co nie jest tym, czego potrzebujesz dla edytora tekstu, ponieważ powinieneś używać metody ruchu, która przesuwa kursor do edycji.

Czego oczekujesz od linków w edytowalnym tekście? Gdy masz edytowalny tekst, stukanie w tekst powoduje umieszczenie kursora w tym miejscu, aby go edytować. Nie otwiera łącza. To są dwie sprzeczne rzeczy. Jeśli chcesz zachować inne zachowanie, musisz dostosować widok tekstowy, aby zrobić coś specjalnego i dowiedzieć się, jak zamierzasz ujednoznacznić tekst, edytując tekst linku i otwierając go (na przykład Dokumenty Google pokazują wyskakujące okienko do wybierz, aby go otworzyć, jeśli nie chcesz go edytować). Ale będziesz musiał sam to zakodować, nie ma magicznej wbudowanej rzeczy, która implementuje to w obecnych ramach.

0

Jeden sposobów jest 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; 
    } 
} 
Powiązane problemy