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 'flies'Rzadkowolski

2
@EugenPechanec code.google.com/p/android/issues/detail?id=195775- 실제로 오류였으며 향후 릴리스에서 수정 될 예정입니다. :)
Arkadiusz 'flies'Rzadkowolski

답변:


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 (내부 객체에 힌트 설정 EditText, TextView힌트 및 오류에 대해 서로 다른 색상을 유지하는 등).


1
감사. 간단 해 보이지만 어떻게 든 내 삶을 위해 그것을 찾을 수 없었습니다!
Seb Jachec 2015

2
업데이트 : 오류 메시지의 스타일을 변경할 수 있습니까? 이것은 필드 위의 힌트 스타일도 변경하는 것 같습니다.
Seb Jachec

정말? 나를위한 것이 아니라 위의 그림을보세요. 스타일을 지정 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
만 색상을 변경하려면, 당신이 스타일의 설정하는 것이 최선의 방법 parent으로 parent="TextAppearance.Design.Error". 이렇게하면 기본 텍스트 크기와 기타 속성이 유지되지만 당면한 질문의 목표 인 오류 색상을 구체적으로 사용자 지정할 수 있습니다.
w3bshark

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

6
나에게이 솔루션은 오류 ( textColorError찾을 수 없음)를 발생 시켰지만 colorError내 테마에서 속성 을 설정 했습니다. Android / 지원 라이브러리의 모든 버전에는 고유 한 테마 속성이있는 것 같습니다.
Slav

9
'Android 리소스 연결 실패'가 표시되지만 <item name="colorError">@color/error</item>정상적으로 작동합니다
m4n3k4s

4
post .. textColorError를 업데이트하십시오. 이제 colorError입니다.
Matt Wolfe

7

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

R.style.InputError_Purple은 어떻게 생겼습니까?
toobsco42

@ toobsco42 스타일은 텍스트 색상 만 정의합니다. 실제 구현으로 답변을 편집했습니다.
Ivan Marić

감사합니다! 이보기를 유효한 텍스트와 오류 텍스트 (녹색 및 빨간색) 모두에 사용하고 밑줄 색상이 올바르게 변경되지 않아서 미쳤습니다.
rexar5

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


오류 텍스트 색상 변경하지만 밑줄 색상은 여전히 그것은 단지 동일한 기능에 대한 다음 호출에 변경 유지
모하마드 Shabaz 무사

@ Dr.aNdRO 이것은 반사를 사용합니다. 항상 작동한다고 보장 할 수는 없습니다!
ucMedia

3

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>

여기에 이미지 설명 입력


1

최신 정보

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


내 경우에서 작동하는 @ 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();
    }
}

오류 텍스트 색상 변경하지만 밑줄 색상은 여전히 그것은 단지 동일한 기능에 대한 다음 호출에 변경 유지
모하마드 Shabaz 무사

2
이것을 사용하지 마십시오. 현재로서는 신뢰할 수 없습니다
Dr.

0

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>

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.