TextInputLayout त्रुटि संदेश रंग कैसे सेट करें?


90

मैं उस त्रुटि संदेश का रंग कैसे बदल सकता हूं जिसे पाठ फ़ील्ड के नीचे एक TextInputLayout(के माध्यम से setError(...)- यहां त्रुटि स्थिति देखें ) में प्रदर्शित होने के लिए सेट किया जा सकता है ?

यह सामान्य रूप से लाल रंग के रूप में दिखता है, जिसे मैं बदलना चाहता हूं। styles.xmlरंग को लक्षित करने के लिए मुझे अपनी फ़ाइल में किन आइटम नामों / कुंजियों का उपयोग करना चाहिए ?

अग्रिम में धन्यवाद।


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

app:errorTextAppearanceमेरे लिए कुंजी जोड़ा गया TextInputLayout:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:id="@+id/welcome_current_week_container"
        app:errorTextAppearance="@style/WelcomeErrorAppearance">
        <EditText
            ..../>
    </android.support.design.widget.TextInputLayout>
</LinearLayout>

और त्रुटि उपस्थिति (परीक्षण के लिए हरे रंग में सेट) :

<style name="WelcomeErrorAppearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@android:color/holo_green_dark</item>
</style>

परिणाम यह है कि संकेत के साथ-साथ त्रुटि संदेश रंगीन है (स्केल किए गए एंड्रॉइड एमुलेटर से स्क्रीनशॉट) :

नियमित (कोई त्रुटि नहीं):

छवि से पहले

त्रुटि स्थिति:

छवि के बाद

2 संपादित करें / परिणाम:

जब त्रुटि संदेश दिखाई देता है, तो फ़ील्ड के ऊपर का संकेत उसी रंग में बदल जाता है, जो त्रुटि संदेश के समान है, संकेत रंग को ओवरराइड करता है - यह डिज़ाइन द्वारा है।



त्रुटि रंग त्रुटि स्थिति में संकेत रंग बदलता है। यह डिजाइन द्वारा है। देखें google.com/design/spec/compenders/… आप TextInputLayout वर्ग को बदले बिना इसके आसपास काम नहीं कर सकते।
यूजेन पिंचेक

@EugenPechanec मुझे नहीं पता था कि यह मामला था। समझाने के लिए धन्यवाद
सेब जेचेक

1
@EugenPechanec मुझे पूरा यकीन है कि आप यहाँ गलत हैं। आप जिस हिस्से का जिक्र कर रहे हैं, वह कैरेक्टर काउंटर से है। सामान्य फ़ील्ड त्रुटियों के लिए इस छवि पर ध्यान देना चाहिए (ध्यान दें कि संकेत रंग का नहीं है) सामग्री-
design.storage.googleapis.com/publish/material_v_4/……

2
@EugenPechanec code.google.com/p/android/issues/detail?id=195775 - यह वास्तव में त्रुटि थी और इसे भविष्य के रिलीज़ में ठीक किया जाएगा :)
अर्कादिअस 'रेज़डकोवोलिन

जवाबों:


140

@android:style/TextAppearanceअपनी styles.xmlफ़ाइल में मूल शैली का उपयोग करें, जो माता-पिता के रूप में उपयोग होती है:

<style name="error_appearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/red_500</item>
    <item name="android:textSize">12sp</item>
</style>

और अपने TextInputLayout विजेट में इसका उपयोग करें:

 <android.support.design.widget.TextInputLayout
            android:id="@+id/emailInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:errorTextAppearance="@style/error_appearance">

त्रुटि उदाहरण

संपादित करें: वस्तु है, जो अपने TextInputLayout (अंदर है पर संकेत सेट EditText, TextViewआदि) संकेत और त्रुटि के लिए अलग अलग रंग धारण करने के लिए।


1
धन्यवाद। सीधा लगता है, लेकिन यह मुझे किसी भी तरह से जीवन के लिए नहीं मिला!
सेब जैचेक

2
अद्यतन: क्या केवल त्रुटि संदेश की स्टाइल को बदलना संभव है? यह क्षेत्र के ऊपर संकेत शैली को बदलने के लिए भी लगता है।
सेब जोचेक

वास्तव में? मेरे लिए नहीं, ऊपर की तस्वीर देखें। क्या आप वाकई शैली को असाइन कर रहे हैं app:errorTextAppearance?
dabo248

1
@EugenPechanec सरलीकृत यह इस तरह दिखता है <android.support.design.widget.TextInputLayout app:errorTextAppearance="@style/error_appearance"><AutoCompleteTextView android:hint="@string/prompt_email"/></android.support.design.widget.TextInputLayout>:। तो हाँ, यह एक और TextView है, इसलिए यह TextInputLayout से त्रुटि रंग नहीं लेता है।
dabo248 23

7
आप केवल रंग बदलना चाहते हैं, यह आप शैली के सेट है कि सबसे अच्छा है parentकरने के लिए parent="TextAppearance.Design.Error"। इस तरह, यह डिफ़ॉल्ट पाठ आकार और अन्य विशेषताओं को बरकरार रखता है, लेकिन आप विशेष रूप से त्रुटि रंग को अनुकूलित करते हैं, जो कि हाथ से प्रश्न का लक्ष्य था।
w3bshark

28

वास्तव में, बस त्रुटि संदेश रंग बदलने के लिए, आप सेट कर सकते हैं textColorErrorअपने विषय में (और यह भी सेट colorControlNormalऔर colorControlActivatedसामान्य विजेट और संकेत पाठ रंग के लिए)। TextInputLayoutउस विशेषता को उठाता है। नोट: यदि आप errorTextAppearanceएक कस्टम शैली पर सेट करते हैं तो textColorErrorकोई प्रभाव नहीं पड़ेगा।

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">@color/control_normal</item>
    <item name="colorControlActivated">@color/control_activated</item>
    <item name="textColorError">@color/error</item>
    <!-- other styles... -->
</style>

और अपने AndroidManifest.xml में:

<application
    android:theme="@style/AppTheme"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">

    <!-- ... -->

</application>

17
किसी को वास्तव में विषयों और शैलियों और सभी संभावित विशेषताओं के बारे में एक पुस्तक लिखना चाहिए। यह वास्तव में पागल है, आप रंग और शैली सेट कर सकते हैं बहुत सारे तरीके हैं, और यह जानने का कोई तरीका नहीं है कि कौन सा रास्ता सही है। और निश्चित रूप से कोई प्रलेखन नहीं है :( मेरा मतलब है कि वहाँ है, लेकिन यह वास्तव में भ्रामक है।
aleksamarkoni

यह उच्च स्कोरिंग की तुलना में बहुत बेहतर उत्तर है!
फिल्होमस २६

6
मेरे लिए, इस समाधान के कारण त्रुटि हुई ( textColorErrorनहीं मिली), लेकिन मैं colorErrorअपनी थीम में विशेषता सेट करने में कामयाब रहा । लगता है कि एंड्रॉइड / सपोर्ट लाइब्रेरी के हर संस्करण की अपनी थीम विशेषताएँ हैं।
स्लाव

9
मुझे 'एंड्रॉइड रिसोर्स लिंकिंग फेल हो रही है', लेकिन <item name="colorError">@color/error</item>ठीक काम करता है
m4n3k4s

4
कृपया पोस्ट अपडेट करें .. textColorError अब colorError है।
मैट वोल्फ

7

एक ओर ध्यान दें। मैं एक के साथ स्वीकार समाधान की कोशिश की है errorTextAppereance। यह वास्तव में अच्छा काम करता है लेकिन पहली बार, नई errorTextAppereanceशैली को लागू करने के बाद इनपुट अंडरलाइन रंग नहीं बदल रहा था । मैं देख रहा हूं कि कुछ टिप्पणियां हैं और अन्य लोग भी इसी मुद्दे का सामना कर रहे हैं।

मेरे मामले में, यह तब हो रहा था जब मैं एक नई त्रुटि पाठ सेट करने के बाद एक नई शैली स्थापित कर रहा था। इस कदर:

passwordInputLayout.error = "Password strength"
passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple)

इस दो तरीकों के क्रम को बदलने के बाद पाठ और अपेक्षित रूप से रंग परिवर्तनों को रेखांकित करता है।

passwordInputLayout.setErrorTextAppearance(R.style.InputError_Purple)
passwordInputLayout.error = "Password strength"

और त्रुटि पाठ उपस्थिति शैली कुछ इस तरह दिखती है:

<style name="InputError" parent="TextAppearance.Design.Error"/>
<style name="InputError.Purple">
    <item name="android:textColor">@color/purple</item>
</style>

आपका R.style.InputError_Purple कैसा दिखता है?
टोब्सको 42

@ toobsco42 शैली केवल पाठ रंग को परिभाषित करती है। मैंने उत्तर को वास्तविक कार्यान्वयन के साथ संपादित किया है।
इवान मारीच

धन्यवाद! मैं एक वैध पाठ और त्रुटि पाठ (हरा और लाल) दोनों के लिए इस दृश्य का उपयोग करता हूं और अंडरलाइन रंग सही ढंग से नहीं बदल रहा था जो मुझे पागल कर रहा था।
rexar5

6

मुझे इसे गतिशील रूप से करने की आवश्यकता थी। प्रतिबिंब का उपयोग करना:

public static void setErrorTextColor(TextInputLayout textInputLayout, int color) {
  try {
    Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView");
    fErrorView.setAccessible(true);
    TextView mErrorView = (TextView) fErrorView.get(textInputLayout);
    Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor");
    fCurTextColor.setAccessible(true);
    fCurTextColor.set(mErrorView, color);
  } catch (Exception e) {
    e.printStackTrace();
  }
}

textInputLayout.setErrorEnabled(true)काम करने के लिए आपको उपरोक्त विधि को लागू करने से पहले कॉल करना होगा ।


त्रुटि पाठ का रंग बदलता है, लेकिन रेखांकित रंग अभी भी रहता है। यह केवल एक ही फ़ंक्शन के लिए अगली कॉल पर बदलता है
मोहम्मद शाज़ मोआज़

@ DraNdRO यह प्रतिबिंब का उपयोग करता है, यह हमेशा काम करने की गारंटी नहीं है!
ucMedia

3

सामग्री घटक लाइब्रेरीTextInputLayout में शामिल होने के साथ ही विशेषता का उपयोग करें ।app:errorTextColor

    <com.google.android.material.textfield.TextInputLayout
        app:errorTextColor="@color/...."
        .../>

एक कस्टम शैली में आप उपयोग कर सकते हैं:

<style name="..." parent="Widget.MaterialComponents.TextInputLayout.FilledBox" >
   <item name="errorTextColor">@color/...</item>
   ...
</style>

यहाँ छवि विवरण दर्ज करें


1

अपडेट करें

कृपया इसके बजाय कस्टम दृश्य का उपयोग करें और यह नहीं


@ जारेड्स आंसर का एक मोडेड संस्करण जो मेरे मामले में काम करता है:

public static void setErrorTextColor(TextInputLayout textInputLayout, int color) {
    try {
        Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView");
        fErrorView.setAccessible(true);
        TextView mErrorView = (TextView)fErrorView.get(textInputLayout);
        mErrorView.setTextColor(color);
        mErrorView.requestLayout();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

त्रुटि पाठ का रंग बदलता है, लेकिन रेखांकित रंग अभी भी रहता है। यह केवल एक ही फ़ंक्शन के लिए अगली कॉल पर बदलता है
मोहम्मद शाज़ मोआज़

2
इस का उपयोग न करें। यह अब तक विश्वसनीय नहीं है
डॉ। एएनडीआरओ

0

यदि आप com.google.android.material.textfield.TextInputLayout का उपयोग कर रहे हैं, तो इस इनपुट लेआउट को केवल अपनी शैली सेट करें

<com.google.android.material.textfield.TextInputLayout
                        android:id="@+id/textInputLayoutPassword"
                        style="@style/LoginTextInputLayoutStyle"



<style name="LoginTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">@color/text_input_box</item>
        <item name="errorTextColor">@color/colorRed</item>
    </style>

0

आवश्यकता के आधार पर, कोई व्यक्ति TextInputLayout टेक्स्ट कलर को डायनामिक या सीधे लेआउट XML फ़ाइल में बदल / सेट कर सकता है। नीचे नमूना कोड स्निपेट है

एक कस्टम शैली बनाएँ जो @android: style / TextAppearance को मूल के रूप में आपकी शैलियों में उपयोग करती है। xml फ़ाइल:

<style name="style_error_appearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/color_error</item>
    <item name="android:textSize">11sp</item>
</style>

और, इसे अपने TextInputLayout विजेट में उपयोग करें:

  1. सीधे XML लेआउट में
 <android.support.design.widget.TextInputLayout
            android:id="@+id/your_input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:errorTextAppearance="@style/style_error_appearance">
  1. अपनी कक्षा में गतिशील रूप से
your_input_layout.setErrorTextAppearance(R.style.style_error_appearance);

यदि आप अपने एप्लिकेशन के लिए एकल / समान त्रुटि पाठ रंग सेट करना चाहते हैं तो अपने ऐप थीम में टेक्स्ट रंग को परिभाषित करें

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Error text color... -->
    <item name="textColorError">@color/color_error</item>
    <!-- other styles... -->
</style>

और अपने AndroidManifest.xml में:

<application
    android:theme="@style/AppTheme"
    android:icon="@drawable/ic_launcher"
    android:label="@string/your_app_name">

    <!-- ... -->

</application>

-2

मैंने TextInputLayout स्रोत में देखा और मुझे महसूस हुआ कि त्रुटि पाठ रंग color.xml से प्राप्त किया गया है। बस इसे अपने color.xml में जोड़ें:

<color name="design_textinput_error_color_light" tools:override="true">your hex color</color>

डिज़ाइन लाइब्रेरी के साथ मेरे लिए काम करता है।
Java Geek
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.