web-dev-qa-db-ja.com

TextInputLayoutのエラーメッセージの色を設定するには?

TextInputLayoutのテキストフィールドの下に表示されるように設定できるエラーメッセージの色を変更するにはどうすればよいですか(setError(...)ここのエラー状態を参照 )?

通常は赤色で表示されますが、これは変更したいものです。色をターゲットにするには、styles.xmlファイルでどのアイテム名/キーを使用する必要がありますか?

前もって感謝します。


編集:

TextInputLayoutapp:errorTextAppearanceキーを追加しました:

<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>

結果は、ヒントとエラーメッセージが色付けされていることです(スケーリングされたAndroid Emulatorからのスクリーンショット)

通常(エラーなし):

Before Image

エラー状態:

After Image

編集2 /結果:

エラーメッセージが表示されると、フィールドの上のヒントがエラーメッセージと同じ色に変わり、ヒントの色が上書きされます。これは仕様によるものです。

71
Seb Jachec

@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">

error example

編集: TextInputLayout(EditTextTextViewなど)内にあるオブジェクトにヒントを設定して、ヒントとエラーのさまざまな色を保持します。

127
dabo248

実際、エラーメッセージの色だけを変更するには、テーマに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>
25
Vicky Chijwani

これを動的に行う必要がありました。反射を使用する:

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)を呼び出す必要があります。

6
Jared Rummler

サイドノート。 errorTextAppereanceを使用して、受け入れられている解決策を試しました。本当にうまくいきますが、最初は、新しいerrorTextAppereanceスタイルを適用した後、入力下線の色は変わりませんでした。いくつかのコメントがあり、他の人も同じ問題を経験していると思います。

私の場合、これは新しいエラーテキストを設定した後に新しいスタイルを設定していたときに発生していました。このような:

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

この2つの方法の順序を切り替えた後、テキストと下線の色は予想どおりに変わります。

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>
5
Ivan Marić

UPDATE

これではなく、代わりにカスタムビューを使用してください


私の場合に機能する@ jared's Answerのmoddedバージョン:

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();
    }
}
1
Dr. aNdRO

com.google.Android.material.textfield.TextInputLayoutこの入力レイアウトを使用している場合、1つのスタイルを設定するだけです

<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
Mohit Suthar

必要に応じて、TextInputLayoutテキストの色を動的に、またはレイアウトXMLファイルで直接変更または設定できます。以下はサンプルコードスニペットです

@ Android:style/TextAppearanceを親として使用するカスタムスタイルを作成しますstyles.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);

アプリケーションに単一/同じエラーテキストの色を設定する場合は、app themeでテキストの色を定義します

<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>
0
Rupesh Yadav