2012-01-24 15 views
24

मैं अपने संपादन टेक्स्ट के लिए कुछ सत्यापन करना चाहता हूं जिसमें मैं "enter image description here" आइकन दिखाना चाहता हूं (यह तब आता है जब आप editText.setError("blah blah")) डालते हैं लेकिन पॉपअप प्रदर्शित करने में टेक्स्ट नहीं चाहते हैं कि "blah blah"।आइकन के साथ EditText setError() लेकिन पॉपअप संदेश के बिना

वहाँ यह करने के लिए कोई तरीका है? एक दूसरी तरह से EditText में छवि आइकन दिखाई देगा एक कस्टम लेआउट तैयार करना है। लेकिन वहाँ किसी भी बेहतर समाधान है?

उत्तर

34

समस्या के बाद हल बहुत सारे शोध और क्रमपरिवर्तन- (@van के लिए भी धन्यवाद)

एक नई कक्षा बनाएं जो 01 का विस्तार करेगीकुछ इस-

public class MyEditText extends EditText { 

public MyEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public void setError(CharSequence error, Drawable icon) { 
    setCompoundDrawables(null, null, icon, null); 
} 
} 

उपयोग की तरह इस-

<com.raj.poc.MyEditText 
    android:id="@+id/et_test" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

अब तीसरे चरण में, बस इस-

की तरह एक TextWatcher अपने कस्टम पाठ करने के लिए दृश्य सेट की तरह अपने xml में एक दृश्य के रूप में इस वर्ग
et = (MyEditText) findViewById(R.id.et_test); 

    errorIcon = getResources().getDrawable(R.drawable.ic_error); 
    errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight())); 
     et.setError(null,errorIcon); 

    et.addTextChangedListener(new TextWatcher() { 

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

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      if(s.toString().length()>6){ 
       et.setError("", null); 
      }else{ 
       et.setError("", errorIcon); 
      } 
     } 
    }); 

जहां R.drawable.ic_error =

टेक्स्ट नल रखना समस्या को हल करता है लेकिन अगर हम setError (null) में केवल शून्य रखते हैं, तो यह सत्यापन त्रुटि नहीं दिखाएगा; यह दूसरे परम के साथ शून्य होना चाहिए।

+2

इस तरह आइकन बदल जाएगा जब आइकन गायब नहीं होगा। – Vincent

+1

हाँ सही टेक्स्ट दर्ज होने पर आइकन गायब नहीं होता है –

+0

@ विन्सेंट: कृपया अपडेट किए गए उत्तर को आजमाएं। यह 4.2 पर भी काम करता है और आपकी समस्या हल करता है। हालांकि धन्यवाद। – Rajkiran

4

क्षमा करें राजकिरन, लेकिन आपका समाधान एंड्रॉइड 4.2 संस्करण पर काम नहीं कर रहा है। अगर मैं त्रुटि के लिए null मान सेट करने का प्रयास कर रहा हूं, तो यह भी प्रदर्शित नहीं होता है। मैं जिस समाधान का आया था वह EditText का विस्तार करना था और setError विधि को ओवरराइड करना था। नहीं, मेरे पास पॉपअप के बिना केवल त्रुटि संकेतक है।

@Override 
public void setError(CharSequence pError, Drawable pIcon) { 
    setCompoundDrawables(null, null, pIcon, null); 
} 
+0

ओह से विस्तारित है। आपसे सुनने के लिए खेद है। क्या आपका समाधान काम करता है? – Rajkiran

+0

हां। क्योंकि मुझे आपके जैसी ही समस्या का सामना करना पड़ा और यह पहला समाधान था जिसके साथ मैं आया था। कोशिश करने के लिए स्वतंत्र महसूस करें। – van

+0

ओह, मुझे निश्चित रूप से इस समाधान पर जाना होगा। यदि यह सभी एंड्रॉइड संस्करणों पर काम करता है और मेरे उत्तर पर कमेंट # 1 को संतुष्ट करता है, तो मैं आपके बजाय अपना जवाब स्वीकार करूंगा। :) – Rajkiran

1

मैं एक ही समस्या से निपट रहा हूं। मैं .setError() का उपयोग अपने EditText पर करना चाहता था जब उपयोगकर्ता शून्य इनपुट डालें। लेकिन मुझे लगता है कि पॉप-आउट संदेश परेशान है, खासकर जब आपके पास EditText एस है। मेरा समाधान बेवकूफ और सरल था, लेकिन यह अब तक की सभी उपकरणों पर काम करता है।

मैं अपने ही वर्ग myEditText बनाया है और सिर्फ @Override इस विधि:

@Override 
    public void setError(CharSequence error, Drawable icon) { 
     setCompoundDrawables(null, null, icon, null); 
    } 

तो layout.xml

<cz.project.myEditText 
    ... 
    /> 

में इस्तेमाल करते हैं और अंत में मेरी कोड में मैं myEditText करने के लिए onFocusChangeListener शब्दों में कहें, तो जब कोई क्लिक करता -इन, आइकन गायब हो जाता है।

myEditText input = (myEditText) findViewById(R.id.input); 
    input.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
      input.setError(null); 
    }); 

    if(val == null) input.setError(""); 

यह वास्तव में काम करता है कि कैसे मैं = कोई पॉप-अप संदेश चाहते हैं जब .setError()EditText पर कहा जाता है।

7

आपको नया EditText कक्षा या xml बदलने की आवश्यकता नहीं है। समाधान बहुत सरल है:

Edittext editText= (EditText) rootView.findViewById(R.id.email); 

String str= editText.getText().toString(); 

if(str.equalsIgnoreCase("")){ 

       Drawable dr = getResources().getDrawable(R.drawable.error); 
           //add an error icon to yur drawable files 
       dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight()); 

       editText.setCompoundDrawables(null,null,dr,null); 

      } 
-2

यह बहुत उपयोगी है जब आप edittext क्षेत्र है जब उपयोगकर्ता गलत जानकारी दर्ज करने के लिए त्रुटि संदेश दिखाना चाहते हैं।यह बहुत ही सरल कार्यक्रम है, आपको केवल edtext में serError() विधि का उपयोग करना होगा।

चरण 1: बटन बनाएं और ऑनक्लिक लिस्टनर लागू करें।

btnLogin.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
} 
}); 

चरण 2: मान्य इनपुट फ़ील्ड और इनपुट क्षेत्र में त्रुटि निर्धारित किया है।

if(edName.length()>3){ 
if(edNumber.length()>3){ 
Toast.makeText(getApplicationContext(), "Login success", Toast.LENGTH_SHORT).show(); 
}else{ 
edNumber.setError("Number Mininum length is 4"); 
} 
}else{ 
edName.setError("Name Mininum length is 4"); 
} 

अधिक के लिए इस लिंक का संदर्भ लें: http://velmuruganandroidcoding.blogspot.in/2014/08/set-error-message-in-edittext-android.html

+2

क्या आप फिर से शीर्षक पढ़ सकते हैं? यह कहता है - आइकन के साथ EditText setError() लेकिन पॉपअप संदेश के बिना। – Rajkiran

0

एक त्रुटि संदेश-पॉपअप केवल जब setError("") कहा जाता है के बिना केवल त्रुटि आइकन प्राप्त करने के लिए (यानी त्रुटि संदेश के रूप में एक खाली स्ट्रिंग सेट) जहाँ मैं setError(CharSequence, Drawable) इस तरह ओवरराइड मैं एक कस्टम EditText श्रेणी का उपयोग करें:

@Override 
public void setError(CharSequence error, Drawable icon) { 
    if (error == null) { 
     super.setError(null, icon); 
     setCompoundDrawables(null, null, null, null); 
    } 
    else if (error.toString().equals("")) setCompoundDrawables(null, null, icon, null); 
    else super.setError(error, icon); 
} 

बाकी सब कुछ पहले जैसा ही हो:

0,123,

न तो आइकन और न ही संदेश-पॉपअप प्राप्त करने के लिए setError(null) का उपयोग करें।

setError(errorMessage) का उपयोग करें, जहां errorMessage आइकन और संदेश-पॉपअप प्राप्त करने के लिए कम से कम लंबाई 1 वाला स्ट्रिंग है।