TextInputLayout
のテキストフィールドの下に表示されるように設定できるエラーメッセージの色を変更するにはどうすればよいですか(setError(...)
– ここのエラー状態を参照 )?
通常は赤色で表示されますが、これは変更したいものです。色をターゲットにするには、styles.xml
ファイルでどのアイテム名/キーを使用する必要がありますか?
前もって感謝します。
編集:
TextInputLayout
にapp: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からのスクリーンショット):
通常(エラーなし):
エラー状態:
編集2 /結果:
エラーメッセージが表示されると、フィールドの上のヒントがエラーメッセージと同じ色に変わり、ヒントの色が上書きされます。これは仕様によるものです。
@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
など)内にあるオブジェクトにヒントを設定して、ヒントとエラーのさまざまな色を保持します。
実際、エラーメッセージの色だけを変更するには、テーマに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>
これを動的に行う必要がありました。反射を使用する:
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)
を呼び出す必要があります。
サイドノート。 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>
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();
}
}
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>
必要に応じて、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ウィジェットで使用します:
- 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">
- クラス内で動的に
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>