2016-03-03 4 views
12

जब उपयोगकर्ता एक चरित्र इनपुट करता है और फिर edittext इसे छवि में बदलता है तो मैं एक संपादन को कस्टमाइज़ करना चाहता हूं। छवि की तरह देखो: enter image description hereछवि में Edittext इनपुट चरित्र को अनुकूलित करें?

नोट: ● एक छवि नहीं एक प्रतीक है। अपने xml में edittext inputtype की

+0

जब उपयोगकर्ता कुछ इनपुट करता है तो आप char को प्रतिस्थापित कर सकते हैं। * के साथ बदलने से पहले उपयोगकर्ता एक्शन लिस्टनर का उपयोग करके दर्ज किए गए पाठ को सहेजें * .. छवि के बारे में सुनिश्चित नहीं है हालांकि – Dhina

+0

हमें दिखाएं कि आपने अभी तक क्या प्रयास किया है। – Mangesh

+0

अब मैं कुछ भी नहीं कर रहा हूं। क्योंकि मुझे इसके साथ कोई अनुभव नहीं है। –

उत्तर

20

आपको PasswordTransformationMethod का विस्तार करने और EditText का उपयोग करने की आवश्यकता है।

edt.setTransformationMethod(new CustomPasswordTransformationMethod()); 

करके चिपका दें CustomPasswordTransformationMethod

class CustomPasswordTransformationMethod extends PasswordTransformationMethod { 
    @Override 
    public CharSequence getTransformation(CharSequence source, View view) { 
     return new PasswordCharSequence(source); 
    } 

    private class PasswordCharSequence implements CharSequence { 
     private CharSequence source; 
     public PasswordCharSequence(CharSequence source) { 
      this.source = source; 
     } 
     public char charAt(int index) { 
      if(index>4) //your own condition, when you want to hide characters. 
       return 0x2022; // change this to bullets you want like '*' or '.' 
      return source.charAt(index); 
     } 
     public int length() { 
      return source.length(); 
     } 
     public CharSequence subSequence(int start, int end) { 
      return source.subSequence(start, end); 
     } 
    } 
} 

कोड से ऊपर चरित्र लिखेंगे के रूप में यह 5 चरित्र तक है, उसके बाद यह EditText में गोलियों प्रिंट होगा।

संदर्भ this से लिया पोस्ट

अद्यतन

अंत में यहाँ जवाब है:

Spannable.Factory spannableFactory; 
int lastIndex = -1; 

spannableFactory = Spannable.Factory 
      .getInstance(); 

1. अपने EditText में addTextChangedListener जोड़ें।

mEditText.addTextChangedListener(watcher); 

    TextWatcher watcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (start>4) { 
       mEditText.removeTextChangedListener(watcher); 
       mEditText.setText(getIconText(context, s, start)); 
       mEditText.addTextChangedListener(watcher); 
       mEditText.setSelection(s.length()); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }; 
  1. Spannable

    public Spannable getIconText(Context context, CharSequence text, int index) { 
        Spannable spannable = spannableFactory.newSpannable(text); 
        if (index>lastIndex) { 
         spannable.setSpan(new ImageSpan(context, R.drawable.bullet_point), 
          index, index + 1, 
          Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        } 
        lastIndex=index; 
        return spannable; 
    } 
    

enter image description here

+0

हां, धन्यवाद। लेकिन मैं इसे बुलेट या '*' में बदलना नहीं चाहता, मैं छवि में बदलना चाहता हूं। –

+0

आह धन्यवाद। मैं अब कोशिश करूँगा। –

+2

ठीक है। यह पूरी तरह से काम करता है। बहुत बड़ा धन्यवाद। –

2

उपयोग संपत्ति

android:inputType="textPassword" 
+0

एंड्रॉइड: inputType = "textPassword" मास्क पर सभी वर्णों को बदलता है, लेकिन मुझे लगता है कि कुछ चरित्र मुखौटा नहीं हैं और अन्य मेरे छवि मुखौटा के साथ मुखौटा हैं। –

+2

@HuoChhunleng उस मामले में आपको पासवर्ड ट्रांस्फ़ॉर्मेशन विधि को कस्टमाइज़ करने की आवश्यकता है जो कस्टम क्लास बनाते हैं जो पासवर्ड ट्रान्सफॉर्मेशन मोड को बढ़ाता है और आपके तर्क को लागू करता है – Ajinkya

4

मान लीजिए कि अगर आप ● चरित्र चरित्र साथ बदलने के लिए चाहते हैं। तो फिर तुम इस के लिए TextWatcher जोड़ सकते हैं, जो इस

myEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      StringBuilder myText = new StringBuilder(myEditText.getText().toString()); 
      if (myText.toString().contains("b")){ //If this contains b 
       myText.setCharAt(myText.indexOf("b"),'●'); 
       myEditText.setText(myText.toString()); //Sets the string to EditText 
       myEditText.setSelection(myText.length()); //Moves cursor to the last after replacing 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

अद्यतन

हम छवि रखने के लिए setCompoundDrawablesWithIntrinsicBounds उपयोग कर सकते हैं, लेकिन नहीं कर सकते सही स्थिति में एक चरित्र के रूप में यह जगह की तरह दिखता है। हम केवल सीमाओं को परिभाषित कर सकते हैं।

+1

उसे किसी भी चरित्र के साथ छवि के साथ इसे बदलना है, क्या आपको ऐसा करने का कोई विचार है ?? –

+1

@AnujSharma हम इसके लिए 'setCompoundDrawablesWithIntrinsicBounds' का उपयोग कर सकते हैं लेकिन इसे सटीक स्थिति पर एक वर्ण के रूप में नहीं रख सकते हैं। हम केवल सीमाओं को परिभाषित कर सकते हैं। –

2

में अपने drawable कन्वर्ट अपने कोड में यह कोशिश करो। doc

EditText text = (EditText) findViewById(R.id.edtTest); 
    text.setCompoundDrawablesWithIntrinsicBounds(null, null, 
         getResources().getDrawable(R.drawable.myDrawable), null); 
+0

हां मैं इसे आज़माउंगा। –

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