How to set TextInputLayout error message colour?

前端 未结 9 2136
旧巷少年郎
旧巷少年郎 2020-11-27 13:58

How can I change the colour of the error message that can be set to appear below the text field in a TextInputLayout (via setError(...) – see error

相关标签:
9条回答
  • 2020-11-27 14:31

    If you are using com.google.android.material.textfield.TextInputLayout this input layout than you just set one style

    <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 讨论(0)
  • 2020-11-27 14:32

    I needed to do this dynamically. Using reflection:

    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();
      }
    }
    

    You will need to call textInputLayout.setErrorEnabled(true) before invoking the above method for this to work.

    0 讨论(0)
  • 2020-11-27 14:32

    With the TextInputLayout included in the Material Components Library just use the app:errorTextColor attribute.

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

    In a custom style you can use:

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

    0 讨论(0)
  • 2020-11-27 14:33

    One side note. I have tried the accepted solution one with errorTextAppereance. It works really good but at first, the input underline color was not changing after applying a new errorTextAppereance style. I see there are a few comments and that other people are experiencing the same issue.

    In my case, this was happening when I was setting a new style after setting a new error text. Like this:

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

    After switching the order of this two methods the text and underline color changes as expected.

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

    And the error text appearance style looks something like this:

    <style name="InputError" parent="TextAppearance.Design.Error"/>
    <style name="InputError.Purple">
        <item name="android:textColor">@color/purple</item>
    </style>
    
    0 讨论(0)
  • 2020-11-27 14:39

    Depending on need, one can change/set TextInputLayout text color dynamically or directly in the layout XML file. Below is sample code snippets

    Create a custom style which uses @android:style/TextAppearance as parent in your styles.xml file:

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

    And, use it in your TextInputLayout widget:

    1. Directly in XML Layout
     <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. Dynamically in your class
    your_input_layout.setErrorTextAppearance(R.style.style_error_appearance);
    

    If you want to set single/same error text color for your application then define the text color in your app theme

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

    And in your AndroidManifest.xml:

    <application
        android:theme="@style/AppTheme"
        android:icon="@drawable/ic_launcher"
        android:label="@string/your_app_name">
    
        <!-- ... -->
    
    </application>
    
    0 讨论(0)
  • 2020-11-27 14:39

    I looked into the TextInputLayout source and I realised that error text color is gotten from colors.xml. Just add this to your colors.xml:

    <color name="design_textinput_error_color_light" tools:override="true">your hex color</color>
    
    0 讨论(0)
提交回复
热议问题