2014-10-15 11 views
5

sto effettivamente cercando di fare la formattazione della carta, per questo sto cercando di attuare ciò che dice a Google di linkCome utilizzare setSpan() in onTextChanged() per salvare i parametri di onTextChanged()?

Non viene detto dove il cambiamento ha avuto luogo a causa di altri metodi afterTextChanged() possono già hanno fatto altri cambiamenti e invalidato le compensazioni. Ma se hai bisogno di sapere qui, puoi usare setSpan (Object, int, int, int) in onTextChanged (CharSequence, int, int, int) per contrassegnare il tuo posto e quindi cercare da qui dove è finito lo span.

Dall'alto quello che ho capito è che ho bisogno di salvare [CharSequence s, inizio int, int prima, int count] utilizzando setSpan in OnTextChanged() e in qualche modo li recuperare indietro nel afterTextChanged().

La domanda è, su quale oggetto si chiama setSpan() in onTextChanged() e come posso recuperare quei valori salvati in afterTextChanged().

+2

Mi chiedo la stessa cosa, per un caso d'uso quasi identico. L'hai mai capito? –

risposta

3

Quindi ho capito questo. Di seguito è riportato un esempio di barebone che può essere utilizzato come punto di partenza.

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, sembra orribile. Ho anche giocato un po 'di casino, e ho scoperto che fondamentalmente puoi lanciare CharSequence s su Spannable, dato che nella maggior parte dei casi i parametri s sono una sottoclasse, che implementa Spannable come oggetto span puoi usare TextWatcher stesso (passa questo). – kravitz

Problemi correlati