[android] TextInputLayout 오류 메시지 색상을 설정하는 방법은 무엇입니까?

텍스트 필드 아래에 표시되도록 설정할 수있는 오류 메시지의 색상을 어떻게 변경할 수 있습니까 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 / 결과 수정 :

오류 메시지가 나타나면 필드 위의 힌트가 오류 메시지와 동일한 색상으로 변경되어 힌트 색상을 무시합니다. 이것은 의도적으로 설계된 것입니다.



답변

파일 @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>


답변

한 쪽 참고. 나는 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>


답변

나는 이것을 동적으로해야했다. 반사 사용 :

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)이 작업을 수행하려면 위의 메서드 를 호출 하기 전에 호출 해야합니다 .


답변

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>

여기에 이미지 설명 입력


답변

최신 정보

대신 사용자 정의보기를 사용하십시오.


내 경우에서 작동하는 @ jared ‘s Answer의 수정 버전 :

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 을 사용하는 경우 하나의 스타일을 설정하는 것 보다이 입력 레이아웃을

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