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>

その結果、ヒントとエラーメッセージに色が付けられます(スケーリングされたAndroidエミュレーターのスクリーンショット)

通常(エラーなし):

画像の前

エラー状態:

残像

編集2 /結果:

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



エラー色は、エラー状態のヒント色を置き換えます。これは仕様によるものです。google.com/design/spec/components/を参照してください TextInputLayoutクラスを変更せずにこれを回避することはできません。
Eugen Pechanec 2015年

@EugenPechanec私はこれが事実であることに気づいていませんでした。説明してくれてありがとう
Seb Jachec 2015年

1
@EugenPechanec私はあなたがここで間違っているとかなり確信しています。あなたが参照している部分はキャラクターカウンターからのものです。通常のフィールドの場合はエラーが(ヒントが着色されていない旨の通知)この画像上のようになりますmaterial-design.storage.googleapis.com/publish/material_v_4/...
はArkadiusz「ハエ」Rzadkowolski

2
@EugenPechanec code.google.com/p/android/issues/detail?id=195775-それは確かにエラーであり、将来のリリースで修正される予定です:)
Arkadiusz 'ハエ' Rzadkowolski 2016年

回答:


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内にあるオブジェクト、上のヒントを設定しEditTextTextViewヒントやエラーのために異なる色を保持するなど、)。


1
ありがとう。簡単そうに見えますが、どういうわけか私の人生のためにそれを見つけることができませんでした!
Seb Jachec 2015年

2
更新:エラーメッセージのスタイルを変更することは可能ですか?これにより、フィールドの上のヒントスタイルも変更されるようです。
Seb Jachec 2015年

本当に?私のためではありません、上の写真を見てください。スタイルを割り当ててもapp:errorTextAppearanceよろしいですか?
dabo248 2015年

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

7
あなただけの色を変更したい場合は、それはあなたのスタイルの設定することをお勧めしますparentparent="TextAppearance.Design.Error"。そうすれば、デフォルトのテキストサイズやその他の属性が保持されますが、目前の質問の目的であったエラーの色を具体的にカスタマイズできます。
w3bshark 2016

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
誰かが本当にテーマとスタイルとすべての可能な属性についての本を書くべきです。これは本当に非常識です。色やスタイルを設定する方法はたくさんあり、どれが正しい方法かを知る方法はありません。そして、オフコースで何もドキュメントがありませんすべて:( I平均があるが、それは本当に混乱しています。
aleksamarkoni

これは、スコアの高いものよりもはるかに良い答えです!
philthomas26 2018

6
私にとって、この解決策はエラー(textColorError見つかりません)を引き起こしましたcolorErrorが、テーマに属性を設定することができました。Android /サポートライブラリのすべてのバージョンに独自のテーマ属性があるようです。
スラブ人

9
「Androidリソースのリンクに失敗しました」と表示されますが、<item name="colorError">@color/error</item>
正常に

4
投稿を更新してください。textColorErrorはcolorErrorになりました。
マット・ウォルフ

7

片側のメモ。受け入れられた解決策をで試しました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>

R.style.InputError_Purpleはどのように見えますか?
toobsco42 2018年

@ toobsco42スタイルは、テキストの色のみを定義します。実際の実装で答えを編集しました。
イヴァン・マリック

ありがとうございました!私はこのビューを有効なテキストとエラーテキスト(緑と赤)の両方に使用していますが、下線の色が正しく変更されなかったために夢中になりました。
rexar5 2018年

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)これを機能させるには、上記のメソッドを呼び出す前に呼び出す必要があります。


エラーテキストの色は変わりますが、下線の色は変わりません。同じ関数を次に呼び出したときにのみ変わります
Mohammad Shabaz Moosa 2017年

@ Dr.aNdROこれはリフレクションを使用しますが、常に機能するとは限りません。
ucMedia


1

更新

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


私の場合に機能する@jaredの回答の修正バージョン:

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

エラーテキストの色は変わりますが、下線の色は変わりません。同じ関数を次に呼び出したときにのみ変わります
Mohammad Shabaz Moosa 2017年

2
これは使用しないでください。これは現時点では信頼できません
Dr. aNdRO 2017

0

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

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

styles.xmlファイルの親として@android:style / TextAppearanceを使用するカスタムスタイルを作成します。

<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ソースを調べたところ、エラーテキストの色がcolors.xmlから取得されていることがわかりました。これをcolors.xmlに追加するだけです。

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

デザインライブラリが追加された私のために動作します。
Java Geek 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.