2013-06-22 23 views
10

Tôi có một ứng dụng trò chuyện cung cấp khả năng thêm biểu tượng cảm xúc vào văn bản.Xóa toàn bộ Spannable bằng backspace

Tôi gặp sự cố với trường EditText. Các hình ảnh biểu tượng cảm xúc xuất hiện nhưng nếu tôi nhấn trên bàn phím bình thường nút backspace, văn bản mà tôi đã thay đổi thành một hình ảnh biểu tượng cảm xúc xuất hiện và tôi phải xóa vài ký tự cho đến khi hình ảnh biến mất. Tôi đang sử dụng Spannable để thực hiện việc này.

Tôi muốn toàn bộ smilie biến mất nếu người dùng nhấn một lần backspace.

Dưới đây là đoạn code tôi đang sử dụng:

// This is in the keyclicked listener 
{ 
    ... 
    smilie = "(angel)"; 
    break; 
    ... 
    int cursorPosition = content.getSelectionStart(); 
    content.getText().insert(cursorPosition, getSmiledText(this, smilie)); 
    content.getText().insert(cursorPosition + smilie.length(), " "); 
} 

public static boolean addSmiles(Context context, Spannable spannable) { 
    boolean hasChanges = false; 
    for (Entry<Pattern, Integer> entry : smilies.entrySet()) { 
     Matcher matcher = entry.getKey().matcher(spannable); 
     while (matcher.find()) { 
      boolean set = true; 
      for (ImageSpan span : spannable.getSpans(matcher.start(), 
        matcher.end(), ImageSpan.class)) 
       if (spannable.getSpanStart(span) >= matcher.start() 
         && spannable.getSpanEnd(span) <= matcher.end()) 
        spannable.removeSpan(span); 
       else { 
        set = false; 
        break; 
       } 
      if (set) { 
       hasChanges = true; 
       spannable.setSpan(new ImageSpan(context, entry.getValue()), 
         matcher.start(), matcher.end(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } 
    } 
    return hasChanges; 
} 

public static Spannable getSmiledText(Context context, CharSequence text) { 
    Spannable spannable = spannableFactory.newSpannable(text); 
    addSmiles(context, spannable); 
    return spannable; 
} 
+0

Tắt vòng bít, phân lớp 'EditText', ghi đè lên các phương thức quản lý khóa và thêm vào logic backspace-on-an-emoticon của riêng bạn, nối chuỗi vào siêu lớp cho tất cả các trường hợp khác. – CommonsWare

+0

xem http://stackoverflow.com/questions/16876871/convert-drawable-to-a-specific-string/16881037#16881037 – pskink

+0

Hi tobias này. Tôi đang phải đối mặt với vấn đề tương tự. Bạn có thể giải quyết điều đó không? –

Trả lời

2

Vì vậy, bạn không thể ép buộc bàn phím để làm rằng- bàn phím thường không nhìn thấy loại thông tin. Những gì bạn có thể làm là đặt một TextWatcher vào trường chỉnh sửa và ghi đè afterTextChanged để phát hiện trường hợp này và xóa các ký tự bổ sung cần thiết. Nó sẽ là một nỗi đau nhưng có thể làm được.

Các vấn đề liên quan