2011-09-01 15 views
19

मैं एक बहुत ही सरल EditText है:एंड्रॉयड EditText.setError(), पैदावार अदृश्य त्रुटि पाठ

<EditText 
    android:id="@+id/myedit" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:maxLength="32"/> 

कुछ सत्यापन कोड में, मैं Android के EditText.setError() का उपयोग किसी भी सत्यापन त्रुटियों को दिखाने के लिए। यह ओएस 2.x में ठीक काम करता है लेकिन ओएस 3.x डिवाइस (एक्सूम) पर नहीं - ज़ूम पर आप त्रुटि पॉपअप की रूपरेखा देख सकते हैं लेकिन आप त्रुटि टेक्स्ट नहीं देख सकते हैं।

मुझे लगता है कि पाठ वहां है, लेकिन यह अदृश्य है। मैं इसे कैसे दिखाना चाहूंगा? मुझे android:textColor दिखाई नहीं देता है जो त्रुटि टेक्स्ट से संबंधित होगा।

इसके अलावा, यदि पाठ वास्तव में अदृश्य है, तो कोई विचार क्यों 2.x 3.x के लिए अलग-अलग व्यवहार करता है - ऐसा लगता है कि इससे पिछड़ा-संगतता समस्याएं उत्पन्न हो सकती हैं।

धन्यवाद।

+0

ऐसा लगता है कि पाठ नहीं है, लेकिन यह हल्के भूरे रंग है एक सफेद पृष्ठभूमि पर क्योंकि गतिविधि Theme.Light का उपयोग कर रही है। – jarmod

उत्तर

48

ऐसा लगता है कि आप स्ट्रिंग के बजाए स्पैन करने योग्य स्ट्रिंगबिल्डर ऑब्जेक्ट के साथ EditText.setError() को कॉल करके इस समस्या को हल कर सकते हैं।

int ecolor = xxxx; // whatever color you want 
String estring = "Input is incorrect"; 
ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); 
SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); 
ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); 
myedittext.setError(ssbuilder); 
+0

चालाक उत्तर .. – Manivannan

+0

यह मेरे लिए काम नहीं कर रहा है ... – Noman

+0

अब मेरे लिए काम कर रहा है .... :) – Noman

6

देशी parent theme उपयोग अपने खुद के अनुकूलित शैली में उचित एपीआई स्तर के लिए! "@Android: शैली/theme.name"।

Configuration qualifier द्वारा विषयों भेद:

value/style.xml - > parent="@android:style/Theme.Light" 
value-v11/style.xml -> parent="@android:style/Theme.Holo.Light" 
value-v14/style.xml -> parent="@android:style/Theme.DeviceDefault.Light" 

http://code.google.com/p/android/issues/detail?id=22920

+3

धन्यवाद, मैंने लिंक द्वारा दिए गए समाधान का उपयोग किया: <शैली का नाम = "MyApp.Theme.Light.NoTitleBar" पैरेंट = "@ एंड्रॉइड: शैली/थीम। लाइट नं। टिटलेबार"> @android: color/primary_text_light Sylphe

+0

यह समाधान मेरे लिए काम करता है क्योंकि स्वीकार किए गए समाधान हमेशा काले (निश्चित) रंग –

4

मैं एक ही समस्या थी। मेरे मामले में, मैंने पैरेंट = "एंड्रॉइड: थीम.लाइट" को मूल्यों-V14/styles.xml पर लागू किया था। इसने एंड्रॉइड एपीआई 2.3.3 और उसके बाद के नियंत्रण की तरह दिखने के लिए एडिटटेक्स्ट नियंत्रण बनाया। लेकिन त्रुटि संदेश पाठ सभी सफेद था और इसलिए, दिखाई नहीं दे रहा था। कुछ सिर खरोंच के बाद मैंने यह पता लगाया।

पैरेंट = "एंड्रॉइड: थीम.लाइट" को पैरेंट = "एंड्रॉइड: थीम.होलो.लाइट.एक्शनक्शन" (जो भी होलो थीम) में बदलें। लेकिन EditText परिभाषा जोड़ने android:background="@android:drawable/edit_text"

मेरे EditText इस

<EditText 
       android:id="@+id/password" 
       style="@style/editTextNormal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/email" 
       android:hint="@string/prompt_password" 
       android:imeActionId="@+id/login" 
       android:imeActionLabel="@string/action_sign_in_short" 
       android:imeOptions="actionUnspecified" 
       android:inputType="textPassword" 
       android:maxLines="1" 
       android:singleLine="true" 
       android:background="@android:drawable/edit_text" /> 
4

तरह लग रहा है आपको त्रुटि पाठ को देखने के पाठ का रंग बदलना चाहते हैं, तो आप अपने विषय फाइलों में इस कोड को जोड़ना चाहिए।

v8 के लिए:

<item name="android:textColorSecondaryInverse">@android:color/secondary_text_light</item> 

v11 के लिए:

<item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item> 
+0

का उपयोग करते हैं यह मेरे लिए काम करता है। – Alfergon

19

एक और अधिक सुरुचिपूर्ण समाधान के लिए कोशिश यह एक:

editText.setError(Html.fromHtml("<font color='red'>Error Message!</font>")); 
+1

मुझे यह जवाब पसंद है। – addoil

+1

अच्छा एक .... धन्यवाद #mostar –

+1

लेकिन मैं इसे काम नहीं करने की कोशिश करता हूं, edtAddr.setError (Html.fromHtml (" त्रुटि संदेश!")); – influx

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