Android Material TextInputLayout 구성 요소의 비활성 테두리 획 색상을 변경하는 방법
TextInputLayout 초점이 맞지 않는 테두리 획 색상을 설정하려고합니다. 마찬가지로 질문과 답변이 너무 많아서 모두 시도했습니다. 스타일을 만들고 테마로 사용하는 것과 마찬가지로 색상 선택기를 만들고 적용했으며 색상 선택기로 app : boxStrokeColor를 직접 적용했습니다. 그러나 이러한 사용 가능한 솔루션으로는 운이 없습니다.
확실하지 않습니다. 내가 어디에서 잘못하고 있는지 또는 아직 누락 된 부분이 있습니다. 전체 설정에 대한 가시성을 높이기 위해 코드를 테스트 프로젝트 에 github 로 푸시했습니다 . 다음은 빠른 검토를위한 샘플 코드입니다.
activity_main.xml (ConstraintLayout 내부 TextInputLayout)
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Tried this as well - app:boxStrokeColor="@color/text_input_box_stroke_color" -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/emailTextInputLayout"
android:hint="Email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:theme="@style/TextInputLayoutStyle"
android:layout_marginHorizontal="24dp"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailTextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:importantForAutofill="no"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">#FF00CC</item>
<item name="boxStrokeWidth">2dp</item>
</style>
</resources>
text_input_box_stroke_color.xml (색상 선택기)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/mtrl_textinput_focused_box_stroke_color" android:state_focused="true"/>
<item android:color="@color/mtrl_textinput_hovered_box_stroke_color" android:state_hovered="true"/>
<item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false"/>
<item android:color="@color/mtrl_textinput_default_box_stroke_color"/>
</selector>
누군가가 지침과 제안을 제공하고 내가 저지른 실수를 알아낼 수 있다면 큰 도움이 될 것입니다.
미리 감사드립니다.
답변
귀하의 코드를 테스트했으며 아래 변경 사항을 수행 한 후에 작동합니다.
1. 먼저 res / color / text_input_box_stroke_color.xml을 아래와 같이 변경하여 다른 상태 색상을 확인하십시오. 아래 예에서는 초점이 맞춰진 상태에 대해 빨간색을 설정하고 기본 비활성 상태에 대해 밝은 파란색을 설정했습니다.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_red_dark" android:state_focused="true" />
<item android:color="@android:color/holo_green_dark" android:state_hovered="true" />
<item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false" />
<item android:color="@android:color/holo_blue_light" />
</selector>
2. 그런 다음 아래와 같이 위의 선택기에 연결 되는 boxStrokeColor로 res / values / styles.xml 을 변경합니다 .
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">@color/text_input_box_stroke_color</item>
<item name="boxStrokeWidth">2dp</item>
</style>
</resources>
3. 마지막으로 TextInputLayout 에서 다음과 같이이 스타일을 추가합니다.
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayoutStyle"
android:id="@+id/emailTextInputLayout"
: 현재 당신 같은 스타일 추가 "스타일 / TextInputLayoutStyle @"= 테마 : 안드로이드를 대신 "스타일 / TextInputLayoutStyle @"= 스타일
이것에 대한 해결책은 다음이며, 지금 막 테스트했기 때문에 작동합니다.
폴더 colors.xml
내부로 이동하십시오 res>values
.

거기에는 colorPrimary
이전에 이미 만든 색상과 다른 색상이 있습니다. 맨 아래로 스크롤하여 다음 행을 추가하십시오.
<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">@color/colorPrimary</color>
그렇게 할 때 거기에서 색상을 변경할 수 있습니다. 나는 정의 @color/colorPrimary
했지만 원하는 것을 사용할 수 있습니다. 이 줄을 적용하기 전에 다음을 얻었습니다.

그리고 그 선을 적용한 후 결과는 다음과 같습니다.

또한 제가 적용 style="@style/YourStyle"
모두 TextInputLayout
와TextInputEditText
아래와 같이 활성 및 비활성 상태에 대한 상자 획 색상을 만듭니다. box_stroke_color
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#2C2C2C" android:state_focused="true"/>
<item android:color="#2C2C2C" android:state_hovered="true"/>
<item android:color="#D7D7D7"/>
</selector>
TextInputLayout 스타일 만들기 : TextInputLayoutStyle
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxStrokeColor">@color/box_stroke_color</item>
<item name="boxStrokeWidth">1dp</item>
</style>
TextInputLayout에서 사용
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayoutStyle" >
<com.google.android.material.textfield.TextInputEditText.. />
</com.google.android.material.textfield.TextInputLayout>