2013-01-02 58 views
30

मैं क्या करना चाहता हूं setError() विधि का उपयोग करने के बाद प्रदर्शित पॉपअप त्रुटि संदेश का पृष्ठभूमि रंग (कस्टम ड्रायबल सेट करें) को बदलना है।एडिटटेक्स्ट के त्रुटि संदेश की पृष्ठभूमि बदलें

वर्तमान में, यह इस तरह दिखता है:

enter image description here

मैं पाया है कि एंड्रॉयड दो फ़ाइलों है:

  • popup_inline_error.9.png
  • popup_inline_above_error.9.png

और तुम ' फिर सक्षम होना चाहिए

  • errorMessageBackground
  • errorMessageAboveBackground

लेकिन जब मैं उन्हें अपने विषय में सेट करने का प्रयास, सभी मुझे मिलता है: दो विशेषताओं का उपयोग कर उन्हें स्थापित करने के लिए

<item name="errorMessageBackground">@drawable/popup_inline_error_holo_light</item> 
<item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_light</item> 

error: Error: No resource found that matches the given name: attr 'errorMessageBackground'. 

(यह है वही with android:errorMessageBackground)

मैं यह क्यू डाल रहा हूं यहां पर उत्सुकता, क्योंकि मैंने विचारों से बाहर भाग लिया है - शायद कोई ऐसा करने में कामयाब रहा है?

संपादित करें:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style 
     name="Theme.MyThemeName" 
     parent="@style/Theme.Sherlock.Light"> 

किसी अन्य संपादन का: थीम मैं उपयोग कर रहा हूँ के हैडर android:errorMessageBackground getting no resource found error in styles.xml

:
उह, मैंने पाया कि मेरे सवाल का डुप्लिकेट है

किसी और संपादित करें: यह एक ज्ञात समस्या है, इस लिंक पर एक नज़र डालें: https://code.google.com/p/android/issues/detail?id=55879

+1

क्या आपने [इस सवाल] पर एक नज़र डाली है (http://stackoverflow.com/questions/6745577/which-theme-attribute-changes-the-text-color-of-an-edittexts-error-message)? – Eric

+0

मैंने वास्तव में किया - लेकिन मैं बुलबुले का रंग बदलना चाहता हूं, पाठ रंग नहीं (जिसे मैं बदल सकता हूं)। मैंने देखा है कि क्रिस पृष्ठभूमि बदलने में कामयाब रहा - मुझे नहीं पता कि कैसे। – scana

+0

ऐसा लगता है कि 'errorMessageBackground' एंड्रॉइड एपीआई स्तर 1 में पेश की गई एक नई विशेषता है। क्या आपने अपनी शैली को' value-v19' फ़ोल्डर में डालने का प्रयास किया है? –

उत्तर

0
private EditText adTitle; 
// .... 
adTitle.setError(Html.fromHtml("<font color='red'>hello</font>")); 
+0

मैं जो चाहता हूं वह संपादन टेक्स्ट की पृष्ठभूमि को बदलना है, न कि फ़ॉन्ट रंग स्वयं - कृपया उत्तर देने से पहले सावधानी से प्रश्न पढ़ें। – scana

+1

यह वास्तव में मेरे लिए उपयोगी था ... !!! धन्यवाद..!!! –

+16

यह सवाल का जवाब नहीं देता है। – Garcon

-2

आप इस विधि का उपयोग केवल संदेश पाठ, अपने edittext आईडी पारित कर सकते हैं

public static void setErrorMsg(String msg,EditText viewId) 
{ 
    //Osama ibrahim 10/5/2013 
    int ecolor = Color.WHITE; // whatever color you want 
    String estring = msg; 
    ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); 
    SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); 
    ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); 
    viewId.setError(ssbuilder); 

} 
+3

के लिए समस्या का समाधान करेगा क्षमा करें, यह वही नहीं है जो मैं चाहता था - मुझे आईसीएस से त्रुटि संदेश के समान दिखने के लिए पूरी पृष्ठभूमि बदलनी पड़ी। – scana

5

आप इन dependancies शामिल करने के लिए की आवश्यकता होगी:

compile 'com.android.support:appcompat-v7:23.1.1' 
compile 'com.android.support:design:23.1.1' 

और यहाँ पर कैसे करने के लिए एक नमूना है इसका उपयोग करें:

<android.support.design.widget.TextInputLayout 
     android:id="@+id/input_layout_password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/input_password" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/hint_email" /> 

</android.support.design.widget.TextInputLayout> 

यह आपको वह सामग्री डिज़ाइन देगा जो आप फॉर्म सत्यापन के साथ-साथ लेबल के लिए एक अच्छा एनीमेशन प्रभाव देने के लिए देख रहे हैं।

enter image description here

4

मैं @Codeversed solution उपयोग करने के लिए सुझाव है, लेकिन अगर यह किसी कारण से आप के लिए फिट नहीं करता है आप अपने कस्टम EditText कार्यान्वयन का उपयोग कर सकते हैं।

सामान्य EditText प्रतिनिधित्व: त्रुटि के साथ enter image description here

EditText: enter image description here

कुछ शब्दों में: मैं त्रुटि प्रदर्शन के लिए कस्टम एक्सएमएल राज्य बना लिया है।

InputEditText.java:

import android.annotation.TargetApi; 
import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Build; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.AttributeSet; 
import android.widget.EditText; 

import com.example.oleksandr.inputedittext.R; 

/** 
* Input EditText which allows define custom drawable for error state 
*/ 
public class InputEditText extends EditText { 

    private static final int[] STATE_ERROR = {R.attr.state_error}; 

    private boolean mIsError = false; 

    public InputEditText(Context context) { 
     this(context, null, 0); 
     init(); 
    } 

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

    public InputEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public InputEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     init(); 
    } 

    private void init() { 
     addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       // empty 
      } 

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

      @Override 
      public void afterTextChanged(Editable s) { 
       // empty 
      } 
     }); 
    } 

    @Override 
    public void setError(CharSequence error) { 
     mIsError = error != null; 
     super.setError(error); 
     refreshDrawableState(); 
    } 

    @Override 
    public void setError(CharSequence error, Drawable icon) { 
     mIsError = error != null; 
     super.setError(error, icon); 
     refreshDrawableState(); 
    } 

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (mIsError) { 
      mergeDrawableStates(drawableState, STATE_ERROR); 
     } 
     return drawableState; 
    } 
} 

drawable/edittext_bg_error.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    android:id="@+id/listview_background_shape" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <stroke 
     android:width="2dp" 
     android:color="#f00" 
     /> 
    <padding 
     android:bottom="2dp" 
     android:left="2dp" 
     android:right="2dp" 
     android:top="2dp" 
     /> 
    <corners android:radius="5dp"/> 
    <solid android:color="#ffffffff"/> 
</shape> 

drawable/edittext_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <!-- custom error state drawable --> 
    <item android:drawable="@drawable/edittext_bg_error" app:state_error="true"/> 

    <!-- Do whatever you want for all other states --> 
    <item android:drawable="@android:drawable/editbox_background_normal"/> 
</selector> 
नीचे संबंधित कोड देखें

अपने attrs.xml

<attr name="errorColor" format="reference"/> 

करने और styleables.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="error"> 
     <attr name="state_error" format="boolean"/> 
    </declare-styleable> 
</resources> 

और उपयोग करने के लिए जोड़ वास्तव में सरल है:

<com.example.oleksandr.inputedittext.views.InputEditText 
    android:id="@id/edittext" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/edittext_bg_selector" 
    android:inputType="text" 
    android:text="@string/hello_world" 
    /> 

[संपादित करें]:

बस एहसास हुआ, कि मूल उत्तर त्रुटि पॉपअप रंग बदलने के बारे में था, लेकिन संपादन टेक्स्ट पृष्ठभूमि रंग नहीं था। वैसे भी, उम्मीद है कि यह किसी की मदद कर सकता है।

+1

मैं इस दृष्टिकोण की तरह कुछ ढूंढ रहा था। धन्यवाद –