2014-10-15 26 views
5

Aslında bunun için diğer afterTextChanged() yöntemleri zaten başka değişiklikler yapmış olabilir çünkü değişim gerçekleşti nerede söyledim değildironTextChanged() parametresinde setSpan() nasıl kullanılır? OnTextChanged() parametrelerini kaydetmek için?

link google söylediklerini uygulamaya çalışıyorum, kart biçimlendirme yapmaya çalışıyorum ve ofsetleri geçersiz kıldı. Ancak, burada bilmeniz gerekiyorsa, yerinizi işaretlemek için onSextChanged (CharSequence, int, int, int) 'de setSpan (Object, int, int, int)' yi kullanabilir ve daha sonra yayının bittiği yerden buraya bakabilirsiniz. Anladığım kadarıyla Yukarıdan

I() OnTextChanged() içinde setSpan kullanan [önce CharSequence s, int başlangıç, int sayısı int] kaydetmek ve bir şekilde afterTextChanged içinde onları geri almak gerekir olduğunu.

Soru, onTextChanged() 'da setSpan() öğesini hangi nesnede çağırırım ve bu kaydedilen değerleri afterTextChanged() biçiminde nasıl alırım.

+2

Ben hemen hemen aynı kullanım örneği için, aynı şeyi merak ediyorum. Bunu hiç anladın mı? –

cevap

3

Ben de bunu anladım. Aşağıda, başlangıç ​​noktası olarak kullanılabilen bir barebone örneği bulunmaktadır.

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

Vay, bu korkunç görünüyor. Ben de onunla uğraştım ve temelde CharSequence s 'yi Spannable'a atayabildiğini öğrendim, çünkü çoğu durumda, parametre s, Spannable'ı TextWatcher'ın kendisini kullanabileceğiniz bir span nesnesi olarak kullanan bir alt sınıftır (bunu geç). – kravitz