Android Material TextInputLayout 구성 요소의 비활성 테두리 획 색상을 변경하는 방법

Dec 14 2020

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 MariosP Jan 08 2021 at 23:31

귀하의 코드를 테스트했으며 아래 변경 사항을 수행 한 후에 작동합니다.

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 @"= 스타일

SlothCoding Jan 07 2021 at 05:52

이것에 대한 해결책은 다음이며, 지금 막 테스트했기 때문에 작동합니다.

폴더 colors.xml내부로 이동하십시오 res>values.

거기에는 colorPrimary이전에 이미 만든 색상과 다른 색상이 있습니다. 맨 아래로 스크롤하여 다음 행을 추가하십시오.

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">@color/colorPrimary</color>

그렇게 할 때 거기에서 색상을 변경할 수 있습니다. 나는 정의 @color/colorPrimary했지만 원하는 것을 사용할 수 있습니다. 이 줄을 적용하기 전에 다음을 얻었습니다.

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

또한 제가 적용 style="@style/YourStyle"모두 TextInputLayoutTextInputEditText

AslamHossin Jan 09 2021 at 16:11

아래와 같이 활성 및 비활성 상태에 대한 상자 획 색상을 만듭니다. 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>