2011-10-12 44 views
8

Tôi về cơ bản muốn hiểu về lớp học LinkMovementMethod. Tôi đang có một văn bản Chỉnh sửa hình ảnh bên trong cần phải có thể nhấp được. Vì vậy, tôi đã sử dụng LinkMovementMethod.getInstance để chỉnh sửa văn bản. Nhưng vì đối tượng LinkMovementMethod này, menu ngữ cảnh (nhấn và giữ) tùy chọn để chỉnh sửa văn bản như sao chép, cắt, dán không hiển thị. Ngoài ra tôi không thể định vị con trỏ trong văn bản chỉnh sửa. Bằng cách nào đó con trỏ đang ẩn.Android: sử dụng LinkMovementMethod để chỉnh sửa văn bản

Đây có phải là cách tiếp cận đúng để sử dụng LinkMovementMethod trong văn bản chỉnh sửa hay là cần thiết để viết một lớp LinkMovementMethod tùy chỉnh cho vấn đề con trỏ và ngữ cảnh.

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

-Regards, Ron ..

+0

Hi! Bạn có giải quyết được vấn đề này không? Tôi rất thú vị trong câu trả lời. Cảm ơn! – lubart

+0

@lubart Không, tôi vẫn đang gặp phải vấn đề tương tự. Từ mã nguồn của văn bản chỉnh sửa android, có vẻ như bản sao android chỉ là văn bản chứ không phải hình ảnh trong bản sao trong văn bản chỉnh sửa. Ngoài ra con trỏ không hiển thị trong khi LinkMovementMethod vẫn còn là một bí ẩn. – Ron

+0

Mọi cập nhật? Tôi không thể hiển thị con trỏ khi sử dụng setMovementMethod(). – exception01

Trả lời

2

Bạn không nên sử dụng LinkMovementMethod với văn bản có thể chỉnh sửa. LinkMovementMethod là một phương thức di chuyển cho phép bạn di chuyển giữa các liên kết ... mà không phải là những gì bạn muốn cho một trình soạn thảo văn bản, vì bạn nên sử dụng phương thức di chuyển di chuyển con trỏ xung quanh để chỉnh sửa.

Bạn mong đợi điều gì với các liên kết trong văn bản có thể chỉnh sửa? Khi bạn có văn bản có thể chỉnh sửa, hãy nhấn vào văn bản sẽ đặt con trỏ vào thời điểm đó để chỉnh sửa văn bản. Nó không mở liên kết. Đây là hai điều trái ngược nhau. Nếu bạn muốn có một số hành vi khác, bạn sẽ cần phải tùy chỉnh chế độ xem văn bản để làm một điều gì đó đặc biệt và tìm hiểu cách bạn định phân tách giữa chỉnh sửa văn bản liên kết và mở nó (ví dụ: Google Documents hiển thị cho bạn cửa sổ bật lên chọn mở nó nếu bạn không muốn chỉnh sửa nó). Nhưng bạn sẽ cần phải tự mình viết mã này, không có phép xây dựng sẵn trong đó thực hiện điều này trong khung công tác hiện tại.

0

Một cách là 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; 
    } 
} 
Các vấn đề liên quan