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