2014-10-15 6 views
5

मैं वास्तव में, कार्ड स्वरूपण करने के लिए कोशिश कर रहा हूँ कि मैं लागू करने के लिए क्या गूगल का कहना है linkTextChanged() के पैरामीटर को सहेजने के लिए setTpan() में setSpan() का उपयोग कैसे करें?

से आप नहीं बताया जाता है जहां परिवर्तन हुआ है क्योंकि अन्य afterTextChanged() पद्धतियों पहले से ही अन्य परिवर्तन किए हों कोशिश कर रहा हूँ और ऑफसेट को अवैध कर दिया। लेकिन अगर आपको यहां जानने की ज़रूरत है, तो आप अपनी जगह को चिह्नित करने के लिएTextChanged (CharSequence, int, int, int) में setSpan (ऑब्जेक्ट, int, int, int) का उपयोग कर सकते हैं और फिर यहां से ऊपर दिखाई दे सकते हैं जहां अवधि समाप्त हो गई है।

मैं क्या समझ ऊपर से मैं [, इससे पहले कि CharSequence रों, पूर्णांक शुरू, पूर्णांक पूर्णांक गिनती] onTextChanged() में setSpan का उपयोग कर() को बचाने के लिए और किसी भी तरह afterTextChanged में उन्हें वापस पुनः प्राप्त की जरूरत है।

प्रश्न यह है कि, किस ऑब्जेक्ट पर मैं setSpan() को onTextChanged() में कॉल करता हूं और मैं उन सहेजे गए मानों को बाद में टेक्स्टटाउन() में कैसे प्राप्त करूं?

+2

मैं लगभग समान उपयोग मामले के लिए एक ही चीज़ सोच रहा हूं। क्या आपको इसका कभी पता चला? –

उत्तर

3

तो मैंने इसे एक बाहर निकाला। नीचे एक barebones उदाहरण है कि एक प्रारंभिक बिंदु के रूप में इस्तेमाल किया जा सकता है।

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

वाह, यह भयावह लग रहा है। मैं इसके साथ भी गड़बड़ कर रहा था, और पाया कि आप मूल रूप से CharSequence एस को स्पैन करने योग्य बना सकते हैं, क्योंकि ज्यादातर मामलों में पैरामीटर एस सबक्लास है, जो स्पैनबल को स्पैन ऑब्जेक्ट के रूप में लागू करता है, आप टेक्स्टवॉचर का उपयोग कर सकते हैं (इसे पास करें)। – kravitz

संबंधित मुद्दे