Android MaterialTextInputLayoutコンポーネントの非アクティブな境界線のストロークの色を変更する方法

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>