2014-10-15 18 views
5

Tôi thực sự cố gắng để làm định dạng thẻ, cho rằng tôi đang cố gắng để thực hiện những gì google nói từ linkLàm thế nào để sử dụng setSpan() trong onTextChanged() để lưu các tham số của onTextChanged()?

Bạn không nói nơi sự thay đổi đã diễn ra vì afterTextChanged() phương pháp khác có thể đã thực hiện thay đổi khác và vô hiệu hóa bù trừ. Nhưng nếu bạn cần biết ở đây, bạn có thể sử dụng setSpan (Object, int, int, int) trong onTextChanged (CharSequence, int, int, int) để đánh dấu vị trí của bạn và sau đó nhìn lên từ đây, nơi span kết thúc.

Từ trên những gì tôi hiểu là tôi cần phải lưu [CharSequence s, int start, int trước, số lượng int] sử dụng setSpan trong OnTextChanged() và bằng cách nào đó lấy chúng trở lại trong afterTextChanged().

Câu hỏi là, đối tượng nào tôi gọi setSpan() trong onTextChanged() và làm cách nào để truy xuất các giá trị đã lưu đó trong afterTextChanged().

+2

Tôi tự hỏi điều tương tự, đối với trường hợp sử dụng gần như giống hệt nhau. Bạn đã bao giờ con số này ra? –

Trả lời

3

Vì vậy, tôi đã tìm ra điều này. Dưới đây là ví dụ về barebones có thể được sử dụng làm điểm bắt đầu.

import android.text.Editable; 
import android.text.SpannableString; 
import android.text.Spanned; 
import android.text.TextWatcher; 
import android.text.style.RelativeSizeSpan; 

public class AwesomeTextWatcherDeluxe implements TextWatcher { 

    private RelativeSizeSpan span; 
    private SpannableString spannable; 


    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // We can use any span here. I use RelativeSizeSpan with size 1, which makes absolutely nothing. 
     // Perhaps there are other spans better suited for it? 
     span = new RelativeSizeSpan(1.0f); 
     spannable = new SpannableString(s); 
     spannable.setSpan(span, start, start + count, Spanned.SPAN_COMPOSING); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     int beginIndex = spannable.getSpanStart(span); 
     int endIndex = spannable.getSpanEnd(span); 

     // Do your changes here. 

     // Cleanup 
     spannable.removeSpan(span); 
     span = null; 
     spannable = null; 
    } 
} 
+0

Wow, có vẻ đáng sợ. Tôi đã làm rối tung nó xung quanh, và phát hiện ra rằng về cơ bản bạn có thể cast CharSequence s thành Spannable, vì trong hầu hết các trường hợp tham số s là một lớp con, thực hiện Spannable như một đối tượng span bạn có thể sử dụng TextWatcher (vượt qua điều này). – kravitz

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